关于javascript: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。

评论

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

这个站点使用 Akismet 来减少垃圾评论。了解你的评论数据如何被处理