Number.isSafeInteger()

Baseline 已广泛支持

此特性已相当成熟,可在许多设备和浏览器版本上使用。自 2015 年 9 月以来,该特性已在各大浏览器中可用。

Number.isSafeInteger() 静态方法用于判断一个值是否为安全整数

试一试

function warn(x) {
  if (Number.isSafeInteger(x)) {
    return "Precision safe.";
  }
  return "Precision may be lost!";
}

console.log(warn(2 ** 53));
// Expected output: "Precision may be lost!"

console.log(warn(2 ** 53 - 1));
// Expected output: "Precision safe."

语法

js
Number.isSafeInteger(testValue)

参数

testValue

待测试的值,用于判断其是否为安全整数。

返回值

如果给定值是一个安全整数,则返回 true;否则返回 false

描述

安全整数包括从 -(253 - 1) 到 253 - 1(包含两端,即 ±9,007,199,254,740,991)之间的所有整数。安全整数是指

  • 可以精确表示为 IEEE-754 双精度数的整数,并且
  • 其 IEEE-754 表示不是通过舍入其他整数以适应 IEEE-754 表示而产生的。

例如,253 - 1 是一个安全整数:它可以被精确表示,并且在任何 IEEE-754 舍入模式下,没有其他整数会被舍入到它。相反,253不是一个安全整数:虽然它可以被 IEEE-754 精确表示,但是整数 253 + 1 无法直接在 IEEE-754 中表示,而是会在四舍五入到最近和舍入到零时被舍入为 253

要处理大于或小于约 9 千万亿(quadrillion)的数值并保持完整精度,需要使用任意精度算术库。更多关于数字浮点表示的信息,请参阅程序员必知的浮点数运算知识

对于更大的整数,请考虑使用 BigInt 类型。

示例

使用 isSafeInteger()

js
Number.isSafeInteger(3); // true
Number.isSafeInteger(2 ** 53); // false
Number.isSafeInteger(2 ** 53 - 1); // true
Number.isSafeInteger(NaN); // false
Number.isSafeInteger(Infinity); // false
Number.isSafeInteger("3"); // false
Number.isSafeInteger(3.1); // false
Number.isSafeInteger(3.0); // true

规范

规范
ECMAScript® 2026 语言规范
# sec-number.issafeinteger

浏览器兼容性

另见