es6中判断安全整数需先用number.isinteger()确认是否为整数,再用number.issafeinteger()核验是否在±(2⁵³−1)安全范围内,二者缺一不可。

直接用 Number.isInteger() 判断是否为整数,再用 Number.isSafeInteger() 核验是否在安全范围内——这是 ES6 中规避整数精度陷阱最标准、最可靠的两步法。
Number.isInteger():先确认“是不是整数”
它只对真正的 number 类型起作用,不转换类型,也不容忍边界异常值:
- 对
10、-0、42.0返回true(JS 中42.0就是整数42) - 对
3.14、NaN、Infinity、"10"、null、true全部返回false - 不会把字符串
"123"当成数字去解析,避免parseInt("123px") === 123这类误判
Number.isSafeInteger():再确认“能不能精确表示”
即使是一个整数,超出 -(2⁵³−1) 到 2⁵³−1 范围,JS 就无法保证其二进制表示唯一,运算可能出错:
Java Maven 项目审查工作流的通用输入处理。当 Java Maven 项目以 ZIP压缩包或 GitLab 仓库 URL 形式提供且需要...时使用。
-
Number.isSafeInteger(9007199254740991)→true(即Number.MAX_SAFE_INTEGER) -
Number.isSafeInteger(9007199254740992)→false(多 1 就不安全) -
Number.isSafeInteger(-9007199254740991)→true(Number.MIN_SAFE_INTEGER是-9007199254740991) - 注意:
Number.isSafeInteger(3.14)也返回false,因为它先要求是整数
组合使用:整数 + 安全 = 可靠运算基础
尤其在处理 ID、时间戳、大额计数等场景时,必须同时满足两个条件:
-
Number.isInteger(x) && Number.isSafeInteger(x)才能放心用于加减、比较、存储或传给后端 - 例如后端返回用户 ID
9007199254740992,Number.isInteger()会返回true,但Number.isSafeInteger()是false,说明这个 ID 在 JS 中已存在精度风险,应转为字符串处理 - 若需兼容旧环境(如 IE),可手动实现:
typeof x === 'number' && isFinite(x) && Math.floor(x) === x && x >= Number.MIN_SAFE_INTEGER && x
别混淆:isInteger 和 isSafeInteger 各司其职
Number.isInteger() 解决“类型+数学定义”,Number.isSafeInteger() 解决“精度+运算可靠性”。两者不可替代:
- 只用
isInteger:可能拿到9007199254740992这种看似整数实则不可靠的值 - 只用
isSafeInteger:会漏掉3.14或"10"这类明显非整数的输入,但它本就不该负责类型判断 - 两者叠加,才是面向生产环境的健壮校验逻辑
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










