number.isinteger()严格判断值是否为数学整数:仅当参数为number类型、有限值且小数部分为0时返回true,否则false;不进行类型转换,不处理nan/infinity等特殊值。

ES6 中的 Number.isInteger() 是专门用来判断一个值是否为数学意义上整数的原生方法,它不转换类型、不隐式处理,只对真正的 number 类型做精确判定。
核心行为:只认“纯数字型整数”
这个方法有三个硬性前提:必须是 number 类型、必须是有限值、小数部分必须为 0。
- 返回 true 的情况:`Number.isInteger(10)`、`Number.isInteger(-0)`、`Number.isInteger(42.0)` —— JS 中 42.0 和 42 存储完全一致,都算整数
-
返回 false 的情况:
• 小数:
3.14、-7.5• 非数字类型:"10"、true、null、undefined• 特殊数值:NaN、Infinity、-Infinity
和常见误判方式的区别
它不走类型转换路线,所以不会像某些手动写法那样“误收”非法输入:
-
parseInt("10px") === 10→ 会把字符串错当整数,Number.isInteger("10px")直接是 false -
"10" % 1 === 0→ 字符串被强制转成数字再运算,Number.isInteger("10")仍是 false -
Math.floor(5.0) === 5.0→ 看似合理,但没拦住Infinity或NaN,而Number.isInteger()内部已排除这些
兼容旧环境的等效写法
如果需要支持 IE 等不支持 ES6 的环境,可用以下组合逻辑替代:
typeof x === 'number' && isFinite(x) && Math.floor(x) === x
-
typeof x === 'number'拦截字符串、布尔等非数字类型 -
isFinite(x)排除Infinity和NaN -
Math.floor(x) === x确保没有小数部分(含负数,如-5)
注意:它不负责“精度安全”
Number.isInteger() 只回答“是不是整数”,不回答“能不能精确运算”。比如:
-
Number.isInteger(9007199254740992)→ true(它是整数) - 但
9007199254740992 + 1 === 9007199254740992→ true(已丢失精度) - 这种场景需叠加
Number.isSafeInteger()才能真正放心使用











