Math.random()
Baseline Widely available
This feature is well established and works across many devices and browser versions. It’s been available across browsers since July 2015.
Math.random()
静态方法返回一个大于等于 0 且小于 1 的伪随机浮点数,并在该范围内近似均匀分布,然后你可以缩放到所需的范围。其实现将选择随机数生成算法的初始种子;它不能由用户选择或重置。
备注: Math.random()
不能提供密码学安全的随机数。请不要使用它们来处理与安全相关的事情。请使用 Web Crypto API 代替,更具体地来说是 Crypto.getRandomValues()
方法。
尝试一下
语法
Math.random()
参数
无。
返回值
一个在 0(包括)到 1(不包括)之间的伪随机浮点数。
示例
请注意,由于 JavaScript 中的数字是 IEEE 754 浮点数字,具有向最近偶数舍入(round-to-nearest-even)的行为,因此以下函数的范围(不包括 Math.random()
本身)并不准确。如果选择了非常大的边界(253 或更高),在极罕见的情况下有可能达到通常排除(usually-excluded)的上界。
得到一个大于等于 0 小于 1 之间的随机数
function getRandom() {
return Math.random();
}
得到一个两数之间的随机数
该示例返回一个在指定值之间的随机数。这个值不小于(且有可能等于)min
,并且小于(且不等于)max
。
function getRandomArbitrary(min, max) {
return Math.random() * (max - min) + min;
}
得到一个两数之间的随机整数
这个示例返回一个在指定值之间的随机整数。这个值不小于 min
(如果 min
不是整数,则不小于 min
的向上取整数),且小于(但不等于)max
。
function getRandomInt(min, max) {
const minCeiled = Math.ceil(min);
const maxFloored = Math.floor(max);
return Math.floor(Math.random() * (maxFloored - minCeiled) + minCeiled); // 不包含最大值,包含最小值
}
备注:
也许很容易想到用 Math.round()
来实现,但是这会导致你的随机数处于一个不均匀的分布,这可能不符合你的需求。
得到一个两数之间的随机整数,包括两个数在内
虽然上面的 getRandomInt()
函数包含最小值,但不含最大值。如果你需要结果同时包含最小值和最大值怎么办?下面的 getRandomIntInclusive()
函数可以实现这一点。
function getRandomIntInclusive(min, max) {
const minCeiled = Math.ceil(min);
const maxFloored = Math.floor(max);
return Math.floor(Math.random() * (maxFloored - minCeiled + 1) + minCeiled); // 包含最小值和最大值
}
规范
Specification |
---|
ECMAScript Language Specification # sec-math.random |
浏览器兼容性
BCD tables only load in the browser