寬鬆相等、嚴格相等以及隱含轉型
「== 允許在比較中強制轉型,=== 不允許。」
嚴格相等
嚴格相等必須值、型別都要相同才會回傳 true。

1 2 3 4 5 6 7 8 9
| console.log(1 === '1'); // false // '1'是字串 console.log(1 === 1); // true console.log(1 !== '1'); // true
// 不過嚴格相等有兩個例外
console.log(NaN === NaN); // false console.log(+0 === -0); //true
|
寬鬆相等
寬鬆等於只要值相等就會回傳 true,這裡說的值包含字串、布林轉化過來的值。

1 2 3 4 5 6 7
| console.log(1 == '1'); // true console.log(true == '1'); // true console.log(false == '0'); // true console.log(1 != '1'); //false
console.log(Number(!0)); // 1 console.log(1 == !0); // true
|
Null 跟 undefined 不能被轉化為數字型別。
物件與非物件比對
在物件與非物件比對的時候,是使用包裹物件來進行轉換。
1 2 3 4 5
| console.log(Number([10])); // 10 console.log(10 == [10]); // true
console.log(String(['A'])); // 'A' console.log('A' == ['A']); // true
|
物件比對
物件經過隱含轉型後,會變成 [object Object]。
1 2 3 4 5 6
| var a = {c: 5}; var b = {c: 5};
a < b; // false a > b; // false a == b; // false
|
object 指向的是記憶體位置,所以 a == b 時不會相等。
圖片取自