嚴(yán)格相等其實(shí)就是用全等操作符來判斷兩者是否相等码撰,而且兩個(gè)值在比較前都不會(huì)進(jìn)行隱式轉(zhuǎn)換渗柿。比如兩個(gè)值的類型如果不是相同,那么這兩個(gè)值是不相等的脖岛。
const x = 123;
const y = '123';
console.log(x === y) // false
如果兩個(gè)值值相同朵栖,值的類型相同,然后類型都不是Number柴梆,那么兩個(gè)值是相等的陨溅。
const str = '0';
const str2 = '0';
console.log(str === str2) // true
如果兩個(gè)值都是Number類型,兩個(gè)值都相等绍在,但是兩個(gè)值都不是NaN门扇,甚至兩個(gè)值分別為 +0 和 -0 時(shí),兩個(gè)值被認(rèn)為是全等的
const num1 = NaN;
const num2 = NaN;
console.log(num1 === num2) // false
console.log(num1 == num2) // false
console.log(+0 === -0) // true
在日常中使用全等操作符幾乎總是正確的選擇偿渡。
對(duì)于除了數(shù)值之外的值臼寄,全等操作符使用明確的語義進(jìn)行比較:一個(gè)值只與自身全等。
對(duì)于數(shù)值溜宽,全等操作符使用略加修改的語義來處理兩個(gè)特殊情況:
第一個(gè)情況是吉拳,浮點(diǎn)數(shù) 0 是不分正負(fù)的。區(qū)分 +0 和 -0 在解決一些特定的數(shù)學(xué)問題時(shí)是必要的适揉,但是大部分情況下我們并不用關(guān)心留攒。全等操作符認(rèn)為這兩個(gè)值是全等的。
第二個(gè)情況是嫉嘀,浮點(diǎn)數(shù)包含了 NaN 值炼邀,用來表示某些定義不明確的數(shù)學(xué)問題的解,例如:正無窮加負(fù)無窮剪侮。全等操作符認(rèn)為 NaN 與其他任何值都不全等拭宁,包括它自己。(等式 (x !== x
) 成立的唯一情況是 x 的值為 NaN)