# 答案

NaN (Not a Number) 无论使用什么比较运算符进行比较时,他是唯一不等于自身的值。 NaN 通常是没有意义的数学计算的结果,因此两个 NaN 值被认为相等是没有意义的。

# isNaN()Number.isNaN() 的区别

# isNaN

当我们向 isNaN 传递一个参数,它的本意是通过 Number () 方法尝试将这参数转换成 Number 类型,如果成功返回 false,如果失败返回 true。所以 isNaN 只是判断传入的参数是否能转换成数字,并不是严格的判断是否等于 NaN。

// 输出 NaN
Number('测试') 
// true
console.log(isNaN('测试'))

# Number.isNaN

判断传入的参数是否严格的等于 NaN (也就是 ===)。
那一般在什么情况下会用到 Number.isNaN 呢?
当两个变量进行运算时,我们可以使用 Number.isNaN 来判断它的值是否为 NaN。

// 输出 true
console.log(Number.isNaN(1/'测试'));

# 二者的区别

Number.isNaN 与 isNaN 最的区别是,Number.isNaN 不存在类型转换的行为。

isNaN(NaN);         // true
isNaN('A String');  // true
isNaN(undefined);   // true
isNaN({});          // true
Number.isNaN(NaN);          // true
Number.isNaN('A String');   // false
Number.isNaN(undefined);    // false
Number.isNaN({});           // false

# 小彩蛋

使用 ES6 的 Object.is 方法时, NaN 终于等于了自己。

# ES6 Object.is () 的使用

  • 定义:方法判断两个值是否是相同的值
  • 语法:Object.is(value1, value2)
    • value1:第一个需要比较的值
    • value2:第二个需要比较的值
  • 返回值:表示两个参数是否相同的布尔值
Object.is('foo', 'foo');     // true
Object.is(window, window);   // true
Object.is('foo', 'bar');     // false
Object.is([], []);           // false
var foo = { a: 1 };
var bar = { a: 1 };
Object.is(foo, foo);         // true
Object.is(foo, bar);         // false
Object.is(null, null);       // true
// 特例
Object.is(0, -0);            // false
Object.is(-0, -0);           // true
Object.is(NaN, 0/0);         // true

# Object.is()=== 的区别

+0 === -0           // true
NaN === NaN         // false
Object.is(+0, -0)   // false
Object.is(NaN, NaN) // true
更新于 阅读次数

请我喝[茶]~( ̄▽ ̄)~*

宇凌喵 微信支付

微信支付

宇凌喵 支付宝

支付宝