Number.isSafeInteger()

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.

Number.isSafeInteger() 静态方法判断提供的值是否是一个安全整数

尝试一下

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

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

console.log(warn(Math.pow(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 千万亿左右的值时,需要使用任意精度算术库来实现完全精确性。有关浮点数表示的更多信息,请参阅程序员需要了解的浮点数算术知识

对于更大的整数,请考虑使用 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

规范

Specification
ECMAScript® 2025 Language Specification
# sec-number.issafeinteger

浏览器兼容性

Report problems with this compatibility data on GitHub
desktopmobileserver
Chrome
Edge
Firefox
Opera
Safari
Chrome Android
Firefox for Android
Opera Android
Safari on iOS
Samsung Internet
WebView Android
WebView on iOS
Deno
Node.js
isSafeInteger

Legend

Tip: you can click/tap on a cell for more information.

Full support
Full support

参见