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。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM