最推荐使用number.isinteger(),它是es6原生方法,要求参数为数值类型且不转换类型,仅当为数学整数时返回true;兼容旧环境可用typeof x==='number'&&isfinite(x)&&x%1===0等组合判断。

最推荐、最标准的方式是使用 Number.isInteger(),它是 ES6 引入的原生方法,语义清晰、行为确定,专为判断“是否为数学意义上的整数”而设计。
Number.isInteger() —— 官方首选
这是目前判断整数最可靠、最直接的内置方法。它只对真正的 number 类型有效,且不进行类型转换:
- 参数必须是数值类型(
typeof x === 'number'),否则一律返回false; -
Number.isInteger(5)、Number.isInteger(-0)、Number.isInteger(42.0)都返回true(JavaScript 中42.0和42存储相同); -
Number.isInteger(5.1)、Number.isInteger(NaN)、Number.isInteger(Infinity)、Number.isInteger("5")、Number.isInteger(true)全部返回false。
手动组合判断 —— 兼容或需额外控制时
当需要兼容旧环境(如 IE),或想显式控制浮点数、边界值等逻辑时,常用组合方式:
-
类型 + 余数判断:
typeof x === 'number' && isFinite(x) && x % 1 === 0; -
类型 + 取整对比:
typeof x === 'number' && isFinite(x) && Math.floor(x) === x(也可用Math.round或Math.ceil); - 注意:
x % 1 === 0单独使用会把"5"、true、[]等隐式转为数字后误判,所以必须前置类型与有限性检查。
避免踩坑的常见误区
这些写法看似简洁,但容易出错,不建议直接使用:
-
parseInt(x) === x:对5.0返回false(parseInt(5.0)是5,但5 === 5.0为true?等等——实际会因类型不同失败,比如parseInt("5.0") === "5.0"直接是false); -
!isNaN(x) && x % 1 === 0:未排除Infinity和非数字类型,isFinite(x)才是正确守门员; - 正则
/^[+-]?\d+$/.test(x):只适用于字符串,对数字类型会先转字符串,且无法识别科学计数法(如"1e2")或负零等细节。
补充说明:其他相关方法
别混淆用途:
-
Number.isSafeInteger():判断是否为“安全整数”(在-(2^53-1)到2^53-1范围内),用于防止精度丢失场景; -
typeof x === 'number':只判断是否为数字类型,不能区分整数和浮点数; -
isNaN(x)或Number.isNaN(x):专门检测NaN,不是整数判断工具。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











