JavaScript 对值的相等判断有很多不同的算法,==
只是最常用的一种。由于 NaN
和正负零的涉入,除了 ==
和 ===
之外还有 SameValue 和 SameValueZero 算法。
==
、===
、SameValue
== | === | SameValue(Object.is) | |
---|---|---|---|
NaN | NaN == NaN false | NaN === NaN false | Object.is(NaN, NaN) true |
0 、-0 | 0 == -0 true | 0 === -0 true | Object.is(0, -0) false |
SameValueZero
但是你在使用es6中有没有疑惑这种情况:
1 | const set = new Set() |
是不是与上述的三种算法的表现多不一样,这就是第四种比较算法 SameValueZero,它与 SameValue 的区别主要在于 0
与 -0
是否相等。
所以你在实践 includes
方法时,遇到:
1 | const array = [0, NaN] |
就不用大惊小怪了,因为 includes
内部使用的比较算法就是SameValueZero。
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 紫升的博客!
评论