javascript判断整数和nan应优先使用es6方法:number.isinteger()严格检测整数类型,number.issafeinteger()额外保障精度安全,number.isnan()唯一可靠检测nan,避免旧式isnan()等隐式转换陷阱。

JavaScript 中判断整数和 NaN,关键在于区分“类型”“值”和“精度”三个层面。ES6 提供了更精准、语义更明确的方法,避免老式全局函数的隐式类型转换陷阱。
用 Number.isInteger() 判断是否为整数
它只认真正的数字类型整数,不进行任何类型转换:
- 接受 number 类型且值为整数(如
42、-0、42.0)时返回true - 遇到字符串
"42"、布尔true、null、undefined都直接返回false - 注意:
Number.isInteger(3.0000000000000002)可能返回true—— 因为浮点精度丢失导致尾数被截断,实际已不是数学意义的整数
用 Number.isSafeInteger() 判断是否为安全整数
它在 isInteger() 基础上叠加精度保障,适用于 ID、时间戳、大额计数等场景:
- 必须是整数,且绝对值 ≤
Number.MAX_SAFE_INTEGER(即9007199254740991) -
Number.isSafeInteger(9007199254740991)→true,但Number.isSafeInteger(9007199254740992)→false - 超出安全范围的整数虽仍是整数,但可能无法精确参与运算或比较(例如
9007199254740992 === 9007199254740993可能为true)
用 Number.isNaN() 严格检测 NaN
这是唯一推荐的 NaN 检测方式,彻底避开老式 isNaN() 的类型转换问题:
-
Number.isNaN(NaN)→true -
Number.isNaN("foo")、Number.isNaN(undefined)、Number.isNaN(0)全部返回false - 原理:先检查参数是否为
number类型,再判断是否等于NaN—— 不做Number("foo")这类隐式转换
补充:避免踩坑的典型写法
不要混用旧方法。以下写法不安全:
-
typeof x === "number" && x === x❌ ——NaN会漏判(因为NaN !== NaN) -
!isNaN(x)❌ ——!isNaN("123")是true,但它根本不是数字类型 -
x == parseInt(x)❌ —— 对"12.3"或Infinity会出错
安全组合示例:
function isValidInteger(num) {
return Number.isSafeInteger(num);
}
function isExplicitNaN(val) {
return Number.isNaN(val);
}大量免费API接口:立即使用
涵盖生活服务API、金融科技API、企业工商API、等相关的API接口服务。免费API接口可安全、合规地连接上下游,为数据API应用能力赋能!











