Skip to content

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,判断更严格。

Released under the MIT License.