您的位置:

js随机生成1到100随机数的详细阐述

一、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随机数的详细阐述。不同的方法可以根据不同的需求选用,但需要注意保护随机数生成的种子,确保生成的随机数具有真正的随机性。