Number.isInteger()能准确识别数值类型且数学意义为整数的值,如42、-10、0、42.0;对NaN、Infinity、字符串、布尔值、null等非数字类型均返回false,不进行类型转换,语义清晰、行为确定。

Number.isInteger() 在绝大多数情况下是判断整数最可靠、最直接的方法,但它有明确的适用边界——它只对真正的数字类型(number)有效,且严格区分整数与浮点数表示形式。
它能准确识别什么?
该方法检查传入值是否为“数值类型”且“数学意义上为整数”(即无小数部分):
-
Number.isInteger(42)→true -
Number.isInteger(-10)→true -
Number.isInteger(0)→true -
Number.isInteger(42.0)→true(尾部 .0 不影响数值本质) -
Number.isInteger(42.1)→false -
Number.isInteger(NaN)→false -
Number.isInteger(Infinity)→false
它不能处理哪些常见情况?
它**不进行类型转换**,因此对字符串、布尔值、null 等非数字类型一律返回 false:
-
Number.isInteger("42")→false(字符串,不是 number 类型) -
Number.isInteger(true)→false(布尔值) -
Number.isInteger(null)→false -
Number.isInteger(undefined)→false -
Number.isInteger({})→false
如果业务中输入来源多样(如表单值、URL 参数),需先确保值是数字类型,或配合 typeof 和类型转换使用。
立即学习“Java免费学习笔记(深入)”;
和 parseInt / Math.floor 等方案比,优势在哪?
传统方式容易出错:
-
parseInt("42.9") === 42→true,但"42.9"显然不是整数 -
Math.floor(42.9) === 42.9→false,但逻辑绕弯且对负数需额外处理(如Math.ceil(-42.1)) -
val % 1 === 0对NaN、Infinity会返回NaN或false,且要求val是数字类型
Number.isInteger() 语义清晰、行为确定、ECMAScript 标准定义,避免了隐式转换陷阱。
安全使用的建议
若需兼容非数字输入,可封装一层校验:
- 先用
typeof val === 'number'排除非数字类型 - 再用
Number.isInteger(val)判定 - 如需支持字符串数字,可先尝试
Number(val)转换,再判断(注意Number("42.0")得到42,Number("42.1")得到42.1,此时再用isInteger即可)
例如:function isStrictInteger(val) {<br> const num = Number(val);<br> return typeof num === 'number' && !isNaN(num) && Number.isInteger(num);<br>}










