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