為什么?
先轉換再比較 (==)
僅比較而不轉換 (===)
==轉換規則?
==比較運算符會先轉換操作數(強制轉換),然后再進行比較
①如果有一個操作數是布爾值,則在比較相等性之前先將其轉換為數值——false轉換為0,而true轉換為1;
②如果一個操作數是字符串,另一個操作數是數值,在比較相等性之前先將字符串轉換為數值;
在雙等號 左右兩邊類型相等時 采用三等號也就是嚴格運算符的判定規則
[ ] == ![ ] 解題思路? ![] 會變成 false,false會變成0;也就是==右側 是 0; ==在進行比較前,如果有一側是數字,會將另一側也轉化為數字類型,才會進行比較。 Number([]) // 0; 先在等號左側也是0 兩側都是0 所以是true。 [] == ![] -> [] == false -> [] == 0; ==右側的轉換 因為右側是數字,所以左側也要轉換為數字類型,才會進行比較 Number([]) == 0 -> 0 == 0 //true
[] == [] // false 在雙等號 左右兩邊類型相等時 采用三等號也就是嚴格運算符的判定規則 對於對象(數組也是對象)只看雙方地址,地址一樣則返回true,所以[]===[]地址不一樣,返回fasle。
{}=={} // false
同理,等號兩側類型相同,采用三等號判定,比的是地址,所以是false
{} == !{} // false {} == !{} --> {} == false --> {} == 0; 等號右側側的轉化 因為雙等號比較前,會先轉化為相同的類型,所以左側也要轉為數字類型 Number( {} ) == 0 --> NaN == 0 //false NaN和任何數字比都是false,所以{} == !{} // false