生成一个在 0(包含) 和 1(不包含) 之间的随机数生成在两个值之间的随机数生成在两个值之间的随机整数生成一个两个值之间的随机数,包含边界值符合密码学要求的随机数第三方库

打开网易新闻 查看更多图片

Math.random() 会生成一个在 0 和 1 之间的伪随机浮点数。注意 0 包含在内,而 1 不包含在内。

这里的随机数并非意味着每次都能得到一个唯一的数字。它只会在某个周期后才会生成重复的数字。这个周期特别长,所以很难两次得到相同的数字。

如下函数返回一个在两个值之间的随机数。返回值大约或等于 min 值,同时小于 max。

打开网易新闻 查看更多图片

如下函数返回在两个值之间的随机整数。返回值大于或等于 min(如果 min 不是一个整数,min的值是它的下个整数值),同时小于max。

你可能会想使用 Math.round() 来实现这个需求,但这样做会导致随机数分布不均匀,可能不符合你的需求。

上面的 getRandomInt() 函数返回值可能等于传入的最小值,但不会等于传入的最大值。如果需要结果包含两个边界值怎么办?下面的函数可以实现这一点:

现代浏览器支持了 Web Crypto API,其中的 Crypto.getRandomValues() 方法可以生成符合密码学要求的随机数。

为了保证性能,它仍然使用的是伪随机数生成器,不过它生成的值足够密码学要求,可以用于加密用途。

为了实现 Math.random() 类似的功能,可以这样做:

打开网易新闻 查看更多图片

如果你需要一个现成的解决方案,可以试试 rando.js,它提供了简单直观的 API,同时支持浏览器和 Node.js 环境。