js中有四种元语相等,分别为==,===, sameValue, sameValueZero,下面分别介绍一下其异同点,在这些异同点中,关于+0,-0,NaN的判断引出了很多的设定。
==
该相等,在a,b执行比较前,会进行类型的转换,再进行比较,详情见==背后的故事
===
该严格相等,不会进行类型转换,而是直接进行比较,这里需要注意的是
+0 === -0 // true
NaN === NaN // false
sameValue
其执行算法和 ===
基本相同,主要区别在于0和NaN,在该算法策略中,+0和-0不等,NaN等于NaN,js透出了一个api是Object.is,其表现如下:
Object.is(+0, -0) // false
Object.is(NaN, NaN) // true
sameValueZero
其执行算法也和===
雷同,仍然是在0和NaN上有区别,但是js并没有透出api,目前在js的一些api上有体现
- typeArray, arrayBuffer的构造函数
- Map, Set的key值
const m = new Map([[+0, 0], [-0, 1]]); // m只有一个值
- Array.includes