14.3.5 创建一个随机数

随机数可以帮助程序增加多样性。例如,假设有一个问题的数组用于谜题问答程序(如3.5节教程所介绍的那个程序)。我们可以随机地从数组中选择一个问题,而不是每次按照同样的顺序问同样的问题。或者,我们可以使用JavaScript随机地从数组选择一个图形文件的名称,以便每次页面载入的时候显示不同的图像。这些任务都需要一个随机数。

JavaScript提供了Math.random()方法来创建随机数。该方法返回0~1之间的一个随机产生的数字(例如,.9716907176080688或.10345038010895868)。尽管你不太可能需要像这样的数字,但是,我们可以使用一些简单的数学运算来产生从0到任何数字之间的一个整数。例如,要产生0到9之间的整数,可以使用如下的代码:


Math.floor(Math.random()*10);


这段代码分为两个部分。Math.floor()方法内的部分,Math.random()*10,产生了0~10之间的一个随机数。它将产生类似4.190788392268892这样的数字,由于随机数在0~10之间,它不会是10。要得到一个整数,随机的结果传递给Math.floor()方法,它将任何小数向下取舍到最近的整数,因此,3.4448588848变成了3,而.1111939498984变成了0。

如果想要获取1和另一个数字之间的一个随机数,只要将random()方法和最大的数字相乘,并且使用Math.ceil()方法(它将一个数字向上取舍到最近的整数)。例如,如果想要模拟一个掷色子程序,得到1~6之间的一个数字:


var roll=Math.ceil(Math.random()*6);//1,2,3,4,5 or 6


随机选择一个数组元素

我们可以使用Math.random()方法随机地从一个数组中选取一项。正如2.8.2节所述,可以使用一个索引编号来访问数组中的每一项。使用索引值0来访问数组中的第一项,使用数组中的项目数减去1这样的一个索引值,来访问数组中的最后一项。使用Math.random()方法,就可以很容易地随机选取一个数组项:


var people=['Ron','Sally','Tricia','Bob'];//create an array

var random=Math.floor(Math.random()*people.length);

var rndPerson=people[random];//


这段代码的第1行创建了带有4个名字的一个数组。第2行做了两件事情:首先,它产生了0到数组中的项目数之间(people.length)的一个随机数,在这个例子中,是0~4之间的一个数字。然后,它使用Math.floor()方法向下舍入到最近的整数,由此,它产生了数字0、1、2和3。最后,它使用这个数字来访问数组中的一个元素,并且将其存储到名为rndPerson的一个变量中。

用于选择随机数的函数

函数是创建有用的、可复用的代码(参见3.4节)的一种好办法。如果你经常使用随机数,可能想要通过一个简单的函数来帮助你在任意两个数字之间选择随机数,例如,1~6之间的一个数字,或者1~100甚至1000之间的一个数字。如下的函数使用两个参数来调用:第一个参数是最小的可能值(例如1),第二个参数是最大的可能值(例如,6):


function rndNum(from, to){

return Math.floor((Math.random()*(to-from+1))+from);

}


要使用这个函数,将其添加到你的Web页面上(参加3.4节的介绍),然后像下面这样调用它:


var dieRoll=rndNum(1,6);//get a number between 1 and 6