最可靠、推荐的方式是使用 number.isinteger()。它是 es6 引入的原生方法,先检查参数是否为 number 类型,再判断是否为严格整数,对非数字类型、infinity、nan 均返回 false,对 10、-5、0、10.0 返回 true。

JavaScript 中判断一个数值是否为整数,最可靠、推荐的方式是使用 Number.isInteger()。
用 Number.isInteger() 判断(标准且安全)
这是 ES6 引入的原生方法,专门用于检测一个值是否为“严格意义上的整数”(即类型为 number,且值无小数部分):
- 它会先检查参数是否为 number 类型,不是则直接返回 false(比如字符串
"10"、null、undefined都过不了关); - 对
Infinity、-Infinity、NaN也返回 false; - 对
10、-5、0返回 true; - 对
10.0(数值上等于整数)也返回 true,因为 JS 中10.0 === 10,内部表示就是整数。
避免用 parseInt() 或 Math.floor() 等间接方式
这些方法容易出错,不推荐作为整数判断依据:
-
parseInt("10.9") === 10→ true,但原值明显不是整数; -
Math.floor(10.9) === 10.9→ false,看似合理,但Math.floor(-1.2) === -2,而-2 !== -1.2,逻辑混乱; -
value % 1 === 0对大多数情况有效,但对Infinity % 1是NaN,结果为 false(正确),可读性差,且无法区分字符串数字如"5"(会隐式转为 number,但可能带来意外)。
如果需兼容老环境(如 IE)
可以手动实现一个轻量 polyfill:
- 先用
typeof value === 'number'排除非 number 类型; - 再检查
!isNaN(value) && isFinite(value) && Math.floor(value) === value; - 注意:不要只用
Math.floor(value) === value,否则Infinity会报错或返回意外结果。
特别注意:类型和值都要兼顾
JS 是弱类型语言,"10" 是字符串,10 是数字。若输入来源不确定(比如表单值),应先尝试转换再判断:
- 想接受字符串形式的整数?可先用
Number(str)转换,再用Number.isInteger(); - 转换失败时
Number("abc")得NaN,Number.isInteger(NaN)自然返回 false; - 避免用
parseInt(str, 10)后再比较,因为parseInt("10px") === 10会误判。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











