Object.is() VS ===

今天本来打算看一下React 16.3中新的特性,刚打开New context API 这个PR的时候,就看到列的TODO list中的第四条:

Should we use Object.is to compare context values, or is === enough? shallowEqual uses Object.is, but we use === everywhere else.

还真不知道这两中比较方式有什么区别,遂查之。

在Stack Overflow上看到了同样的问题,两个回答都讲得很详细。

Object.is()是ES6中提出的,它与“===”的区别只在于判断+0,-0和NaN时的不同。具体表现如下:

// ===运算符
+0 === -0 // true
-0 === +0 // true
NaN === NaN // false
// Object.is()
Object.is(+0, -0) // false
Object.is(-0, +0) // false
Object.is(NaN, NaN) // true

这两种方法的不同比较结果是由于其使用的比较算法不同导致的。“===”运算符使用的比较算法是Strict Equality,而Object.is()用的是SameValue。除了这两种比较算法,还有SameValueZero, SameValueNonNumber, Abstract Equality。具体的比较规则在这里

文章目录
,