最可靠的方法是用 number.isinteger(),它只对数值类型且无小数部分的整数返回 true,排除字符串、nan、infinity 等;兼容旧环境可用 isfinite(val) && typeof val === 'number' && math.floor(val) === val。

最可靠的方法是用 Number.isInteger(),它是 ES6 标准中专门为此设计的 API。
推荐:使用 Number.isInteger()
它只对真正的整数(即数值类型、无小数部分)返回 true,其他情况一律返回 false:
-
Number.isInteger(42)→true -
Number.isInteger(-7)→true -
Number.isInteger(0)→true -
Number.isInteger(3.14)→false -
Number.isInteger("42")→false(字符串不是数字类型) -
Number.isInteger(NaN)→false -
Number.isInteger(Infinity)→false
注意避开常见误区
以下方法都不严谨,容易出错:
-
parseInt(x) === x:对字符串如"42abc"会误判为整数 -
x % 1 === 0:对NaN、Infinity返回true(因为NaN % 1是NaN,不等于 0,但逻辑易混淆) -
Math.floor(x) === x:对Infinity或非数字类型可能抛错或返回意外结果 -
typeof x === "number" && x === Math.round(x):比%1稍好,但仍无法排除Infinity
兼容旧环境的替代写法
如果需支持 IE 或非常老的运行时,可手动实现一个安全版本:
function isInteger(val) {
return typeof val === 'number' &&
isFinite(val) &&
Math.floor(val) === val;
}
这个写法明确排除了 NaN、Infinity 和非数字类型,行为与 Number.isInteger 一致。
别忘了类型检查本身很重要
很多场景下,你真正需要的不只是“是不是整数”,而是“是否为有效整数输入”。例如表单校验时,建议先转类型再判断:
- 若允许字符串形式的整数(如
"123"),可先Number(str)转换,再用Number.isInteger() - 转换后要检查是否为
NaN,因为Number("abc")得到NaN,而Number.isInteger(NaN)是false
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











