ES标准中的相等比较算法|ES标准中的相等比较算法 SameValue SameValueZero
1、相等比较算法
- The Abstract Equality Comparison Algorithm (==)
- The Strict Equality Comparison Algorithm (===)
- SameValue (Object.is())
- SameValueZero (暂未提供API)
对于前端研发来说,== 和 === 比较算法肯定已经深入了解了。
对于熟练使用ES6的小伙伴,多知道Object.is()这个方法:
Object.is(NaN, NaN) // true Object.is(0, -0) // false
而Object.is内部采用的比较算法就是SameValue(x, y),而它与 === 的区别也正是这两种情况。
3、SameValueZero
【ES标准中的相等比较算法|ES标准中的相等比较算法 SameValue 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。
推荐阅读
- 热闹中的孤独
- JS中的各种宽高度定义及其应用
- 我眼中的佛系经纪人
- 《魔法科高中的劣等生》第26卷(Invasion篇)发售
- Android中的AES加密-下
- 放下心中的偶像包袱吧
- C语言字符函数中的isalnum()和iscntrl()你都知道吗
- C语言浮点函数中的modf和fmod详解
- C语言中的时间函数clock()和time()你都了解吗
- 如何在Mac中的文件选择框中打开系统隐藏文件夹