Number.isSafeInteger()用于判断一个值是否为安全整数,即在-2⁵³+1至2⁵³−1范围内且为精确表示的整数,不进行类型转换,仅对数字类型有效。

Number.isSafeInteger() 用于判断一个值是否为“安全整数”——即能被精确表示、且不会因浮点精度丢失而产生意外结果的整数。
什么是安全整数?
JavaScript 中所有数字都用 IEEE 754 双精度浮点数表示,能精确表示的整数范围是:-2⁵³ + 1 到 2⁵³ − 1(即 -9007199254740991 到 9007199254740991)。超出这个范围的整数可能无法唯一、准确地存储,比如:
-
9007199254740992 === 9007199254740993返回true(实际是精度丢失) -
Number.MAX_SAFE_INTEGER + 1 === Number.MAX_SAFE_INTEGER + 2也返回true
Number.isSafeInteger() 就是专门检查一个值是否落在这个可精确表示的整数区间内,并且本身是整数类型(非 NaN、非小数、非字符串等)。
它只接受真正的数字类型
该方法不会做类型转换,传入非数字会直接返回 false:
立即学习“Java免费学习笔记(深入)”;
-
Number.isSafeInteger(10)→true -
Number.isSafeInteger(10.0)→true(仍是整数) -
Number.isSafeInteger(10.1)→false(带小数部分) -
Number.isSafeInteger("10")→false(字符串,不转类型) -
Number.isSafeInteger(NaN)→false -
Number.isSafeInteger(Infinity)→false
和 Number.isInteger() 的区别
Number.isInteger() 只检查是否为整数(不关心大小),而 isSafeInteger 是更严格的子集:
-
Number.isInteger(9007199254740992)→true -
Number.isSafeInteger(9007199254740992)→false(虽是整数,但已不安全) -
Number.isSafeInteger(123)→true(既是整数,又在安全范围内)
适合用在哪些场景?
当你需要确保整数运算或 ID 比较不会因精度问题出错时,推荐使用:
- 处理来自 API 的大整数 ID(如数据库主键、时间戳毫秒数)
- 做数组索引计算(避免越界或静默错误)
- 金融类应用中校验用户输入的整数金额(需配合其他验证)
- 序列号、版本号等要求严格相等判断的数值
注意:它不能替代输入校验(比如防注入),也不能保证数学运算一定安全(如 a + b 可能溢出),只是帮你确认单个值当前是否处于可信赖的整数表示范围内。










