Number.MAX_SAFE_INTEGER 是 9007199254740991(即 2⁵³−1),表示 JavaScript 中能精确、唯一表示的最大整数;其根源在于 IEEE 754 双精度浮点数的 53 位有效数字限制,超出后会出现精度丢失,可用 Number.isSafeInteger() 判断,超限时应使用 BigInt。

Number.MAX_SAFE_INTEGER 是 JavaScript 中定义“安全整数”上限的常量,它的值是 9007199254740991(即 2⁵³ − 1)。所谓“安全整数”,是指在这个范围内,每个整数都能被精确表示、唯一表示,且参与算术运算时不会因浮点精度丢失而产生意外结果。
为什么是 2⁵³ − 1?
JavaScript 使用 IEEE 754 双精度浮点数格式存储所有数字,其中有效数字(significand)有 53 位(含 1 位隐含位)。这意味着它可以**精确表示所有不超过 2⁵³ 的整数**。但注意:
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
- 2⁵³ 本身可以表示,但 2⁵³ + 1 就无法区分于 2⁵³(因为没有足够位数表达这个 +1)
- 所以最大能被唯一、精确表示的整数是 2⁵³ − 1 = 9007199254740991
- 同理,最小安全整数是 −9007199254740991(即 −Number.MAX_SAFE_INTEGER)
不安全整数的典型表现
超出范围后,整数可能“看起来一样”,但实际已丢失精度:
// 示例:9007199254740991 === 9007199254740992 // false(安全范围内,可区分)9007199254740992 === 9007199254740993 // true!(超出后,+1 无变化)Number.isSafeInteger(9007199254740992) // false
如何判断和处理安全整数
- 用
Number.isSafeInteger(num)判断一个值是否为安全整数(返回布尔值) - 做整数运算(尤其涉及 ID、索引、计数器)前,建议校验:
if (!Number.isSafeInteger(id)) { throw new Error('ID 超出安全整数范围') } - 需要更大整数时,改用
BigInt(如9007199254740991n + 1n),但注意 BigInt 不能与普通 number 混用

















