welcome to Cheeto's blog

0%

JavaScript核心篇:寬鬆相等、嚴格相等以及隱含轉型

寬鬆相等、嚴格相等以及隱含轉型

「== 允許在比較中強制轉型,=== 不允許。」

嚴格相等

嚴格相等必須型別都要相同才會回傳 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 時不會相等。

圖片取自