JavaScript 随机数

JavaScript 随机数简介

在实际开发中,随机数扮演着非常重要的角色,无论是用于游戏逻辑、数据模拟、测试、动画效果,还是安全领域,都离不开随机数的支持。

在 JavaScript 中,我们可以使用 Math 对象的 random() 方法来生成 0~1 之间的一个随机数。random,就是 “随机” 的意思。特别注意一下,这里的 0~1 是包含 0 但不包含 1 的,也就是 [0, 1)。

语法:

Math.random()

说明:

随机数在实际开发是非常有用的,到处都可以捡到。比如随机验证码、随机动画等,都是使用随机数来实现的。

绿叶网的随机验证码

下面给小伙伴们介绍一下随机数方面的使用技巧,这些技巧非常有用,要认真掌握喔。

JavaScript 生成某个范围内的 “随机浮点数”

1. Math.random() * m

表示生成 0 ~ m 之间的随机浮点数,例如 “Math.random() * 10” 表示生成 0 ~ 10 之间的随机浮点数。

2. Math.random() * m + n

表示生成 n ~ m + n 之间的随机浮点数,例如 “Math.random() * 10 + 8” 表示生成 8 ~ 18 之间的随机浮点数。

3. Math.random() * m - n

表示生成 -n ~ m - n 之间的随机浮点数,例如 “Math.random() * 10 - 8” 表示生成 -8 ~ 2 之间的随机浮点数。

4. Math.random() * m - m

表示生成 -m ~ 0 之间的随机浮点数,例如 “Math.random() * 10 - 10” 表示生成 -10 ~ 0 之间的随机浮点数。

JavaScript 生成某个范围内的 “随机整数”

上面介绍的都是随机生成某个范围内的任意数(包括整数和小数),但是很多时候我们需要随机生成某个范围内的整数,此时前面学到的 floor() 和 ceil() 这 2 个方法就能派上用场了。

对于 Math.random() * 5 来说,由于 floor() 是向下取整,因此 Math.floor(Math.random() * 5) 生成的是 0 ~ 4 之间的随机整数。如果你想生成 0 ~ 5 之间的随机整数,应该写成:

Math.floor(Math.random() * (5 + 1))

也就是说,如果你想生成 0 到 m 之间的随机整数,应该这样写:

Math.floor(Math.random() * (m + 1))

如果你想生成 1 到 m 之间的随机整数(包括 1 和 m),应该这样写:

Math.floor(Math.random() * m) + 1

如果你想生成 n 到 m 之间的随机整数(包括 n 和 m),应该这样写:

Math.floor(Math.random() * (m - n + 1)) + n

上面是用 floor() 来生成想要的随机整数,当然我们也可以使用 ceil() 来实现。只不过呢,我们只需要掌握 2 个方法中的任意一个就可以了。

怎么样?现在应该很清楚如何去生成你需要的随机数了吧?上面这些技巧是非常棒的,一定要记住。当然我们不需要去死记硬背,这些技巧稍微推理一下就可以得出来了。在实际开发中,我们一般会封装一个通用函数,用于生成 [min, max] 之间的随机整数:

function getRandomInt(min, max) {
    return Math.floor(Math.random() * (max - min + 1)) + min;
}

最后还有一点要跟大家说一下的,网上很多有关生成随机数的公式其实都是错的,小伙伴们最好是自己动手测试一下。当然,这些技巧暂时还用不上啦,等我们学到更高级的知识时就会知道了。

提示:很多小伙伴不理解为什么 Math.floor(Math.random() * 5) 生成的是 0 ~ 4 之间的整数,而不是 0 ~ 5 之间的整数,是因为他们没有意识到 Math.random() 生成随机数范围是 [0, 1) (即不包含 1)而不是 [0, 1]。

JavaScript 随机数示例

随机验证码在实际开发中经常用到,看似复杂,实则非常简单。我们只需要用到前面学到的生成随机数的技巧,然后结合字符串与数组操作就可以轻松实现。

示例:生成随机验证码

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8" />
    <title></title>
    <script>
        const str = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890";
        let result = "";

        for(let i = 0; i < 4; i++) {
            const n = Math.floor(Math.random() * str.length);
            result += str[n];
        }
        console.log(result);
    </script>
</head>
<body>
</body>
</html>

运行结果如下。

y3xh

分析:

在这个例子中,我们使用 Math.random() 来生成了随机验证码,每一次的运行结果都是不一样的。这里注意一点,由于数组下标是从 0 开始的,因此写成下面这样是错误的。

const n = Math.floor(Math.random() * (arr.length + 1));

正确写法应该是:

const n = Math.floor(Math.random() * arr.length);

上一篇: JavaScript 四舍五入

下一篇: JavaScript DOM

给站长反馈

绿叶网正在不断完善中,小伙伴们如果发现任何问题,还望多多给站长反馈,谢谢!

邮箱:lvyenet@vip.qq.com

「绿叶网」服务号
绿叶网服务号放大
关注服务号,微信也能看教程。
绿叶网服务号