Math.random()

Baseline 已广泛支持

此特性已相当成熟,可在许多设备和浏览器版本上使用。自 ⁨2015 年 7 月⁩以来,各浏览器均已提供此特性。

Math.random() 静态方法返回一个浮点数,一个伪随机数,该数字大于或等于 0 且小于 1,在此范围内近似均匀分布。你可以将其缩放到你想要的范围。该实现选择随机数生成算法的初始种子;用户无法选择或重置它。

注意: Math.random() 提供加密安全的随机数。请勿将其用于任何与安全相关的用途。请改用 Web Crypto API,更具体地说,是 Crypto.getRandomValues() 方法。

试一试

function getRandomInt(max) {
  return Math.floor(Math.random() * max);
}

console.log(getRandomInt(3));
// Expected output: 0, 1 or 2

console.log(getRandomInt(1));
// Expected output: 0

console.log(Math.random());
// Expected output: a number from 0 to <1

语法

js
Math.random()

参数

无。

返回值

介于 0(包含)和 1(不包含)之间的浮点数,伪随机数。

示例

请注意,由于 JavaScript 中的数字是具有四舍五入到最接近偶数的 IEEE 754 浮点数,因此下面各函数声称的范围(不包括 Math.random() 本身)并不完全准确。通常,声称的最大值是无法达到的,但如果 Math.random() 返回一个非常接近 1 的数字,那么微小的差异可能无法在请求的最大值处表示,因此会导致最大值被达到。

获取一个介于 0(包含)和 1(不包含)之间的随机数

js
function getRandom() {
  return Math.random();
}

获取一个介于两个值之间的随机数

此示例返回一个介于指定值之间的随机数。返回的值不低于(并且可能等于)min,且小于(且不等于)max

js
function getRandomArbitrary(min, max) {
  return Math.random() * (max - min) + min;
}

获取一个介于两个值之间的随机整数

此示例返回一个介于指定值之间的随机整数。该值不低于 min(如果 min 不是整数,则为大于 min 的下一个整数),且小于(但不等于)max

js
function getRandomInt(min, max) {
  const minCeiled = Math.ceil(min);
  const maxFloored = Math.floor(max);
  return Math.floor(Math.random() * (maxFloored - minCeiled) + minCeiled); // The maximum is exclusive and the minimum is inclusive
}

注意: 可能会诱使你使用 Math.round() 来实现此目的,但这样做会导致你的随机数遵循非均匀分布,这可能不适合你的需求。

获取一个介于两个值之间的随机整数,包含两者

虽然上面的 `getRandomInt()` 函数包含最小值,但不包含最大值。如果你需要结果同时包含最小值和最大值怎么办?下面的 `getRandomIntInclusive()` 函数可以实现这一点。

js
function getRandomIntInclusive(min, max) {
  const minCeiled = Math.ceil(min);
  const maxFloored = Math.floor(max);
  return Math.floor(Math.random() * (maxFloored - minCeiled + 1) + minCeiled); // The maximum is inclusive and the minimum is inclusive
}

规范

规范
ECMAScript® 2026 语言规范
# sec-math.random

浏览器兼容性

另见