研究了一下javascript
关于随机数的生成,整理如下。
要输出随机数则须用到javascript
的一个方法—random()
,random()
方法属于Math
对象。在javascript
中,Math
对象用于执行数学任务,如:
1 2 |
|
可以看出Math
对象在数学计算上是不可缺少的工具。与Date
,String
不同,她不是对象的类,因此没有构造函数Math()
。像Math.sin()
这样的函数只是函数,并不是某个对象的方法。你不需要创建它,通过把Math
作为对象使用即可以条用她的所有属性及方法。
Math 的属性
1 2 3 4 5 6 7 8 |
|
Math 的方法
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
|
了解Math
对象的相关属性及方法会有意想不到的好处。今天主要研究一下random()
方法,在chrome
控制台输入:
Math.random(); //回车
---> 0.7504939001519233
Math.random(); //回车
---> 0.7824516440741718
typeof(Math.random()); //回车
---> "number"
可以看出random()
方法返回的是0 ~ 1之间的伪随机数。注意,可能为0,但总是小于1即生成数的范围是[0,1)。利用javascript
取整方法parseInt()
即可获取[0,1)之间的整数,如:
parseInt(Math.random() * 10); // 回车
---> 3
parseInt(Math.random() * 10); // 回车
---> 4
parseInt(Math.random() * 10); // 回车
---> 6
Math.floor(Math.random()*10 + 1); //获取[1,10] 之间的随机数
---> 10
由此,并可以获得了[0,1)之间的随机整数值,那么如果想要获取多位随机数(如4444,321,4443)又该如何操作呢?这里可以先随机出n位数,在将这n位数用连接符+
连接起来即可,如下:
function RndNum(n) {
var rnd = "";
for(var i = 0; i < n; i++) {
rnd += Math.floor(Math.random() * 10);
}
return rnd;
}
console.log("四位随机数: " + RndNum(4)); //输出4位数的随机数的随机整数
console.log("八位随机数: " + RndNum(8)); //输出8位数的随机数的随机整数
根据以上信息,我们要指定某个范围(如(2,3)内)的随机数就可以利用公式:(Math.random()*(n-m)+m)
既可以返回m-n之间的随机数了,通用代码如下:
<!-- 获取随机正整数,对应的复数只需要加"-"号即可。0, 1 暂未判断 -->
function getRandomNum( down, up) {
switch (arguments.length) { //传入的参数个数
case 1:
return parseInt(Math.random() * down + 1); // 获取[0,down)间的随机数
case 2:
return parseInt(Math.random() * (up - down + 1) + down); //获取[down,up] 之间的随机数
default:
return 0;
}
}
// 测试代码
console.log("[0,1]间的随机整数:" + getRandomNum(100));
console.log("[2,5]间的随机整数:" + getRandomNum(2,5));
console.log("[1,10]间的随机整数:" + getRandomNum(1,10));
以上便是使用random()
方法创建正整数随机数的方法。当然我们还可以基于时间来创建, 如:
var now_time = new Date();
var second_num = now_time.getSeconds(); //产生一个基于目前时间的0到59的整数
var timestamp_num = now_time.getTime(); //产生一个基于目前时间等我时间戳
console.log("秒随机数:" + num);
console.log("时间戳随机数:" + timestamp_num);
总结
随机数的使用场景随处可见,如可以利用她创建随机的文本、表单、标题广告、背景图片。背景音乐及背景颜色等等。。。掌握了原理,如何运用也就是一码事儿!