一、Math.random()函数的使用
JavaScript的Math.random()函数可以返回一个随机的浮点数,其值介于0(包括)和1(不包括)之间。使用该函数,我们可以生成一个1~100之间的随机数,具体代码如下:
function getRandom() { return Math.floor(Math.random() * 100 + 1); }
上述代码中,我们使用了Math.floor()函数向下取整,并将其乘以100,加1的目的是生成1~100之间的整数随机数。
需要注意的是,由于Math.random()函数的结果是浮点数,需要进行取整操作。如果不进行取整,在100的时候会出现0.999999999999999这样的小数,不符合我们的需求。
二、使用Date对象生成随机数种子
虽然Math.random()函数可以生成随机数,但是它每次生成的随机数都是相互独立的,而且会受到系统时间的影响。如果在某个时间点生成了100个随机数,那么这100个随机数将会首尾相连,形成一个确定的序列。因此,我们需要使用一个随机数种子来生成真正的随机数。
我们可以使用Date对象的getTime()函数来获取当前时间的毫秒数,并将该毫秒数作为随机数种子。在每次生成随机数的时候,我们都先生成一个新的随机数种子,再使用上述的Math.random()函数生成随机数。
具体代码如下:
let seed = new Date().getTime(); function getRandomWithSeed() { seed = (seed * 9301 + 49297) % 233280; return Math.floor(seed / 233280 * 100 + 1); }
上述代码中,我们使用了一个“线性同余算法”(LCG)来生成随机数种子。每次生成随机数种子时,都将前一个种子乘以9301,加上49297,再对233280取模,得到一个新的随机数种子。
需要注意的是,seed变量不能设置为全局变量,否则会影响随机性,使生成的随机数失去意义。
三、使用crypto API生成随机数
当我们需要生成安全的随机数时,可以使用crypto API。crypto API是Web Crypto API的一部分,可以用来生成伪随机数或加密随机数。
具体代码如下:
let array = new Uint32Array(1); window.crypto.getRandomValues(array); let randomNum = array[0] % 100 + 1;
上述代码中,我们使用了Uint32Array类型的数组来存放随机值,再使用crypto API的getRandomValues()函数来生成随机数,最后取模100,加1得到1~100之间的随机数。
四、不使用Math.random()函数的生成随机数方法
如果我们不能使用Math.random()函数或crypto API,也可以使用其他方法来生成随机数。
具体代码如下:
function getRandomWithoutMathRandom() { let x = new Date().getTime(); x ^= x << 21; x ^= x >>> 35; x ^= x << 4; return (x % 100) + 1; }
上述代码中,我们使用了一个简单的“三步反转法”来生成随机数。我们先获取当前时间的毫秒数,然后进行三次位运算,最后取模100,加1得到1~100之间的随机数。
五、总结:
以上就是针对js随机生成1到100随机数的详细阐述。不同的方法可以根据不同的需求选用,但需要注意保护随机数生成的种子,确保生成的随机数具有真正的随机性。