Number.isFinite 严格要求参数为数值类型,非数值直接返回 false;全局 isFinite 会先转换参数为数字再判断,如 isFinite('123') 为 true 而 Number.isFinite('123') 为 false。

核心区别在于类型处理:Number.isFinite 严格要求参数必须是数值类型,非数值直接返回 false;全局 isFinite 会先尝试把参数转成数字再判断。
参数类型是否被强制转换
全局 isFinite('123') 返回 true,因为它内部调用了 Number('123') → 123,再判断 123 是否有限;而 Number.isFinite('123') 直接返回 false,因为字符串不是 number 类型。
- isFinite(null) → true(Number(null) 是 0)
- Number.isFinite(null) → false(typeof null !== 'number')
- isFinite('') → true(Number('') 是 0)
- Number.isFinite('') → false
- isFinite(true) → true(Number(true) 是 1)
- Number.isFinite(true) → false
对特殊值的判断逻辑一致
两者在纯数值输入时行为完全相同:
- Number.isFinite(123) === isFinite(123) → true
- Number.isFinite(Infinity) === isFinite(Infinity) → false
- Number.isFinite(NaN) === isFinite(NaN) → false
- Number.isFinite(-0) === isFinite(-0) → true
实际校验中该选哪个
如果你要校验用户输入或接口返回的“可能带类型的值”,比如表单字段、JSON 数据,推荐用 Number.isFinite —— 它不隐藏类型问题,能帮你早发现非数字内容;如果你明确知道输入已是数字(比如计算结果),两者效果一样,但 Number.isFinite 更语义清晰、符合模块化趋势。
注意:Number.isFinite 不会把 '12.5px'、' 42 ' 这类字符串转为有效数字,它只接受原始 number 类型,这是它的设计本意:做精准类型+值双重校验。


















