Number.isFinite()严格判断参数是否为有限数字类型,仅当参数是number类型且不为Infinity、-Infinity或NaN时返回true,不进行类型转换。

Number.isFinite() 用来严格判断一个值是否为“有限的数字”,它只在参数是真正的数字类型(number)且既不是 Infinity、-Infinity,也不是 NaN 时才返回 true。
只认纯数字类型,其他一概 false
和全局的 isFinite() 不同,Number.isFinite() 不会尝试类型转换。哪怕传入字符串 "123"、布尔值 true、null 或 undefined,都直接返回 false。
-
Number.isFinite(123)→true -
Number.isFinite("123")→false(字符串,不是 number 类型) -
Number.isFinite(true)→false(布尔值) -
Number.isFinite(null)→false -
Number.isFinite(undefined)→false
对特殊数字值的判断很明确
它只接受标准的有限数值,对 JavaScript 中的三个特殊数字值一律拒绝:
-
Number.isFinite(Infinity)→false -
Number.isFinite(-Infinity)→false -
Number.isFinite(NaN)→false -
Number.isFinite(0)→true -
Number.isFinite(-0)→true -
Number.isFinite(1.7976931348623157e+308)→true(最大安全值以内)
和全局 isFinite() 的关键区别
全局 isFinite("123") 会先转成数字再判断,结果是 true;而 Number.isFinite("123") 不做任何转换,直接看类型,结果是 false。这意味着:
立即学习“Java免费学习笔记(深入)”;
- 想确保输入是“已转换好的数字”且确实有限 → 用
Number.isFinite() - 想兼容字符串等可转数字的输入 → 用
isFinite(),但要注意隐式转换可能带来的意外(比如isFinite(" 123 ")是true,而isFinite("12a")是false)
典型使用场景
常用于函数参数校验、API 返回值检查或表单数值处理中,确保你拿到的是“干净的、有限的数字”:
- 校验用户输入经
parseFloat()后的结果是否有效:const n = parseFloat(input); if (Number.isFinite(n)) { ... } - 避免
Infinity参与后续计算导致污染:if (!Number.isFinite(value)) throw new Error("Invalid number"); - 配合
typeof x === 'number'使用,双重确认:typeof x === 'number' && Number.isFinite(x)










