number.isfinite(infinity) 返回 false,因其严格判断值是否为 number 类型且非 infinity、-infinity 或 nan;它不转换类型,而全局 isfinite 会强制转换,二者行为路径不同。

Number.isFinite(Infinity) 返回 false,这是它的标准行为,也是设计初衷——它只认“真正的、有限的 number 类型”。
它到底在判断什么
Number.isFinite 不做任何类型转换,只问两个问题:
- 这个值是不是
number类型? - 如果是,它是不是
Infinity、-Infinity或NaN?
只要其中任一条件不满足,就返回 false。Infinity 是 number 类型,但它是无限值,所以直接被排除。
和全局 isFinite 的关键区别
全局 isFinite("123") 会先调用 Number("123") 转成数字再判断,结果是 true;而 Number.isFinite("123") 连类型都不对,直接返回 false。
-
Number.isFinite(Infinity)→false -
isFinite(Infinity)→false(结果一样,但路径不同) -
Number.isFinite("1e309")→false(字符串,不转) -
isFinite("1e309")→false(转成数字后溢出为 Infinity)
为什么这个细节很重要
在数值校验场景中,比如接收 API 返回的分页总数、计算结果或用户输入转换后的值,如果没提前确认类型,仅靠 Number.isFinite 就可能掩盖问题:
-
Number.isFinite(undefined)→false(但你更该知道“值根本没传”) -
Number.isFinite(null)→false(null 是 object,不是 number) -
Number.isFinite(0 / 0)→false(结果是 NaN,符合预期)
所以推荐组合使用:typeof x === 'number' && Number.isFinite(x),确保类型正确且数值有效。
常见误用提醒
别把 !Number.isFinite(x) 当作“x 是 NaN”的判断依据:
-
!Number.isFinite(NaN)→true -
!Number.isFinite(Infinity)→true -
!Number.isFinite("123")→true(但显然不是 NaN)
要精准识别 NaN,请用 Number.isNaN(x);要区分 Infinity,可单独写 x === Infinity || x === -Infinity。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











