比較運算子

請先參閱:運算子優先序

先來看一段程式碼:

1
console.log(3 < 2 < 1);   // 結果是 true

以人類的邏輯來說,這絕對是錯的,但為什麼 JavaScript 會判定為 true 呢?

小於運算子的相依性是由左至右,程式會優先進行 3 < 2 這部分的判定。於是會變成:

1
console.log(false < 1);

但是 false1 並不是同一個型別,所以 JavaScript 會進行強制型轉

如果你輸入下面這行程式碼,可以知道 false 轉成數字後的值:

1
Number(false);   // 結果是 0

如此一來就變成了:

1
console.log(0 < 1);

0 < 1,無庸置疑的是 true

其他例子:

1
2
3
Number(undefined);  // 結果是 NaN(Not a Number),無法型轉成數字
Number(null); // 結果是 0
Number(!null); // 結果是 1

請先參閱:等號的比較

再來是 ===== 的區別。

為減少錯誤,建議從現在開始大部分時間都使用 ===,除非故意要進行強制型轉。

以下例子使用 ==

1
2
3
4
5
if (false == 0) {
console.log(Equal.);
} else {
console.log(Not equal.);
}

結果會是 Equal,因為 JavaScript 強制把 false 型轉成數字,故 0 == 0 結果是 true。

以下例子使用 ===

1
2
3
4
5
if (false === 0) {
console.log(Equal.);
} else {
console.log(Not equal.);
}

結果會是 Not equal,使用 === JavaScript 就不會進行強制型轉,在兩個值是不同型態的情況下,結果會是 false。

文章結束囉~

如果我的文章對你有幫助,可以幫我拍個手,感謝支持!