number.issafeinteger用于判断值是否为安全整数,即在-2⁵³+1到2⁵³-1范围内且为整数;它依次检查:是number类型、是整数、绝对值不超过number.max_safe_integer。

Number.isSafeInteger 用来判断一个值是否为“安全整数”——即该整数既能精确表示,又不会因浮点精度丢失而产生计算误差。
什么是安全整数?
JavaScript 使用 IEEE 754 双精度浮点数表示所有数字,能精确表示的整数范围是 -2⁵³ + 1 到 2⁵³ - 1(即 -9,007,199,254,740,991 到 9,007,199,254,740,991)。超出这个范围的整数可能无法唯一表示,比如 9007199254740992 === 9007199254740993 会返回 true。Number.isSafeInteger 就是检查一个值是否落在这个范围内,且本身是整数类型。
判断逻辑分三步
它内部按顺序验证以下三点,任一不满足就返回 false:
- 参数必须是
number类型(typeof value === 'number') - 该数值必须是整数(
Math.floor(value) === value,也等价于value % 1 === 0) - 绝对值不能超过
Number.MAX_SAFE_INTEGER(即Math.abs(value) )
常见误判情况
注意这些容易出错的情形:
-
Number.isSafeInteger(123.0)→true(小数点后为 0 的 number 仍算整数) -
Number.isSafeInteger(123.1)→false(带小数部分,不是整数) -
Number.isSafeInteger("123")→false(字符串类型,不经过隐式转换) -
Number.isSafeInteger(NaN)→false(NaN 不是数字,也不是整数) -
Number.isSafeInteger(9007199254740992)→false(刚好越界,不可靠)
和 parseInt / Math.round 的区别
它不做任何转换或取整,只做纯判断:
-
parseInt("123.9")返回123,但Number.isSafeInteger("123.9")直接返回false -
Math.round(123.9)返回124,但Number.isSafeInteger(123.9)仍为false - 想安全使用,应先确保是 number 类型,再用它校验,例如:
Number.isSafeInteger(Number(str))
不复杂但容易忽略细节:类型严格、不自动转换、只认精确整数。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











