js中有四種元語(yǔ)相等,分別為==,===, sameValue, sameValueZero,下面分別介紹一下其異同點(diǎn),在這些異同點(diǎn)中,關(guān)于+0,-0,NaN的判斷引出了很多的設(shè)定。
==
該相等,在a,b執(zhí)行比較前,會(huì)進(jìn)行類型的轉(zhuǎn)換,再進(jìn)行比較,詳情見(jiàn)==背后的故事
===
該嚴(yán)格相等,不會(huì)進(jìn)行類型轉(zhuǎn)換,而是直接進(jìn)行比較,這里需要注意的是
+0 === -0 // true
NaN === NaN // false
sameValue
其執(zhí)行算法和 ===
基本相同,主要區(qū)別在于0和NaN,在該算法策略中,+0和-0不等,NaN等于NaN,js透出了一個(gè)api是Object.is,其表現(xiàn)如下:
Object.is(+0, -0) // false
Object.is(NaN, NaN) // true
sameValueZero
其執(zhí)行算法也和===
雷同,仍然是在0和NaN上有區(qū)別,但是js并沒(méi)有透出api,目前在js的一些api上有體現(xiàn)
- typeArray, arrayBuffer的構(gòu)造函數(shù)
- Map, Set的key值
const m = new Map([[+0, 0], [-0, 1]]); // m只有一個(gè)值
- Array.includes