ES标准中的相等比较算法 SameValue SameValueZero

Posted elaine

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ES标准中的相等比较算法 SameValue SameValueZero相关的知识,希望对你有一定的参考价值。

1、相等比较算法

  • The Abstract Equality Comparison Algorithm (==)
  • The Strict Equality Comparison Algorithm (===)
  • SameValue (Object.is())
  • SameValueZero (暂未提供API)

2、SameValue

对于前端研发来说,== 和 === 比较算法肯定已经深入了解了。

对于熟练使用ES6的小伙伴,多知道Object.is()这个方法:

Object.is(NaN, NaN) // true
Object.is(0, -0) // false

而Object.is内部采用的比较算法就是SameValue(x, y),而它与 === 的区别也正是这两种情况。

3、SameValueZero

但是你在使用es6中有没有疑惑这种情况:

const s = new Set()
s.add(0)
s.add(NaN)
s.has(-0) // true
s.has(NaN) // true

是不是与上述的三种算法的表现多不一样,这就是第四种比较算法SameValueZero,它与SameValue的区别主要在于0与-0是否相等。

所以你在实践includes方法时,遇到:

const a = [0, NaN]
a.includes(-0) // true
a.includes(NaN) // true

就不用大惊小怪了,因为includes内部使用的比较算法就是SameValueZero。

以上是关于ES标准中的相等比较算法 SameValue SameValueZero的主要内容,如果未能解决你的问题,请参考以下文章

对象的新增方法《ES6标准入门(第3版)》

对象的新增方法

js的等值比较规则

对象的新增方法

是否有任何标准算法可以对向量元素进行成对比较?

python: 流程控制