Object.is
方法与严格相等比较运算符
===
有些不同。大部分情况下,
Object.is(a, b)
与
a === b
等价。但是有两种情况不同:
NaN
;
-0
和
+0
。该算法在
ECMAScript
规范中被称为
SameValue
。
当
NaN
和
NaN
比较时,严格相等运算符会返回
false
,因为
NaN
不等于它自身。但是
Object.is
方法则会返回
true
。
NaN === NaN
// <- false
Object.is(NaN, NaN)
// <- true
类似地,当
-0
与
+0
比较时,
===
运算符得到的结果是
true
,但
Object.is
返回
false
。
-0 === +0
// <- true
Object.is(-0, +0)
// <- false
这些差别看起来不大,但由于
NaN
有一些独特的行为,如
typeof NaN
的结果是
'number'
,
处理
NaN
时总是很麻烦,而且
NaN
不等于其自身。