“==”與“===”都是比較左右兩個值是否相等,但它們的原理是不同的,特別要理解“==”的比較。
“==”是弱比較,如果左右兩邊的比較數類型不同,它們會轉換成相同類型,再進行比較,那么問題來了,它們是怎么進行轉換的呢?
- 如果左右兩邊是null?和?undefined,官方說兩個值是相等的,但沒有說明具體原因。從JavaScript類型轉換規則看,只有它們都轉換成了布爾值時(都為false),它們才是相等的,所以可以確定它們都向布爾值進行了轉換;
- 如果左右兩邊一個是字符串,一個是數字,則會將字符串轉換成數字進行比較;如 “1” == 1, 會將等式左邊的字符串轉為數字1后,再進行比較,結果為true
- 如果左右兩邊一個是數字,一個是布爾值,則會把布爾值轉換成數字進行比較;如 1 == true 會將等式右邊的true轉換為數字1后進行比較,結果為true
- 如果左右兩邊一個字符串一個是布爾值,則會都往數字進行轉換;如 true==“1”,會將true轉為數字1,“1”轉換為數字1后進行比較,結果為true
“===”是嚴格相等,即左右兩邊要求類型和數字都是相同的。
如果還需更詳細的解釋,請參考《JavaScript權威指南》中類型的轉換規則和關系表達式