isNaN 和 Number.isNaN 函数的区别?
- 函数
isNaN
接收参数后,会尝试将这个参数转换为数值,任何不能被转换为数值的的值都会返回true
,因此非数字值传入也会返回true
,会影响NaN
的判断。 - 函数
Number.isNaN
会首先判断传入参数是否为数字,如果是数字再继续判断是否为NaN
,不会进行数据类型的转换,这种方法对于NaN
的判断更为准确。
典型示例对比
js
// 示例1:直接判断NaN
console.log(isNaN(NaN)); // true
console.log(Number.isNaN(NaN)); // true
// 示例2:判断字符串
console.log(isNaN('hello')); // true // 'hello'无法转为数字,isNaN返回true
console.log(Number.isNaN('hello')); // false // 'hello'不是数字,Number.isNaN返回false
// 示例3:判断数字字符串
console.log(isNaN('123')); // false // '123'可转为数字123
console.log(Number.isNaN('123')); // false // '123'不是数字
// 示例4:判断undefined
console.log(isNaN(undefined)); // true // undefined转为NaN
console.log(Number.isNaN(undefined)); // false // undefined不是数字
// 示例5:判断对象
console.log(isNaN({})); // true // 对象转为NaN
console.log(Number.isNaN({})); // false // 对象不是数字
// 示例6:判断0/0
console.log(isNaN(0/0)); // true // 0/0为NaN
console.log(Number.isNaN(0/0)); // true // 0/0为NaN
总结:
isNaN
会先尝试类型转换,Number.isNaN
只对真正的数字类型NaN返回true,判断更严格。