记录:自学JavaScript一个半月,开始有点起色。通过在贴吧和csdn论坛上回答问题或看别人的答案,学习积累实战经验。
分享:下面我就来分享一个在贴吧遇到的比较常见的问题【如何生成一个5位以内的整数】
-->>思路分析,首先我们看到的是随机生成,于是乎就想到JS的一个原生方法:Math.random(),随机生成一个0-1的数字。下面就基于这个方法来实现我们的需求。
方法一、
这是一种最简单实现办法
var iTemp = (~~(Math.random()*100000)).toString();
//随机生成0-1的数,乘上100000得到一个整数位数最大为5的浮点数,按位取反,得到整数结果,并转换成字符串,赋值给iTemp
console.log('随机数 ' + iTemp.length + '位\n' + iTemp);//打印出字符串的长度
console.log('分别是:');
iTemp.split('').forEach(function(v){//将字符串分割成数组,利用forEach遍历数组元素,并打印出整数的每一位
console.log(v);
});在Firefox、Chrome及IE9+中支持forEach方法,forEach方法类似于for in,相当于for in的简写。如果我们要兼容IE6-8,那么需要对Array的原型做扩展。
console.log(Array.prototype.forEach);//IE6-8,打印出undefined,没有这个方法
Array.prototype.forEach = Array.prototype.forEach || function(fnCallback){ //兼容IE6-8 ,|| 是为了</span>防止覆盖Array原有的原型,也可以用if判断代替
if (typeof fnCallback != "function")throw new TypeError();//如果for传进来的参数不是一个函数,则抛出一个错误:TypeError
for (var i = 0; i<this.length; i++){//这个就类似于for in的写法,遍历所有元素
if (i in this)fnCallback.call(this, this[i], i, this);//指定fnCallback函数的执行环境
}
};这样就对IE6-8做了一个兼容,让它们也支持forEach方法!
方法二、
这个方法,其实思路也比较简单,不过效果不是特别好
var arr =[0,1,2,3,4,5,6,7,8,9];//定义一个包含0-9的数组
var a = arr[Math.floor(Math.random()*10)]+'';
//Math.floor(Math.random()*10)生成一个0-9的索引,用于取出数组中的元素,加上一个空字符串让其变成字符串
var b = arr[Math.floor(Math.random()*10)]+'';
var c = arr[Math.floor(Math.random()*10)]+'';
var d = arr[Math.floor(Math.random()*10)]+'';
var e = arr[Math.floor(Math.random()*10)]+'';
console.log(~~(a+b+c+d+e));//拼接字符串,然后取整方法三、
这个方法和上面的类似,不过更有随机性。
var arr =[0,1,2,3,4,5,6,7,8,9], //0-9数字范围
temp_arr=[],
return_arr=[],
num = Math.floor(Math.random()*5+1);//随机生成0-5,以此确定生成数字的位数
for(var index in arr){temp_arr.push(arr[index])}//复制一份数组
for (var i = 0; i<num; i++) {
var arrIndex = Math.floor(Math.random()*temp_arr.length);//随机生成一个索引
return_arr.push(temp_arr[arrIndex]);//放入返回数组
}
console.log(~~(return_arr.toString().replace(/,/g, '')));//转成字符串然后取整以上,希望能帮助JS初学者,本人才疏学浅,如有错误不足之处,欢迎指导斧正。
自学JavaScript的作者分享了如何利用Math.random()生成5位以内的整数,包括三种实现方法,并简要提及Array.prototype.forEach的理解。
1964

被折叠的 条评论
为什么被折叠?



