比較運算子會比較兩個運算元的值,並評估這些運算元形成的陳述式是 true
還是 false
。以下範例使用「嚴格等式」運算子 (===
) 來比較兩個運算元:運算式 2 + 2
和值 4
。由於運算式的結果和數字值 4
相同,因此這個運算式評估為 true
:
2 + 2 === 4
> true
類型強制轉換和等式
最常使用的兩個比較運算子是 ==
(表示鬆等) 和 ===
(用於嚴格等式)。==
會將運算元強制轉換成相符資料類型,藉此執行兩個值之間的寬鬆比較。舉例來說,即使比較內容是在數字值和字串值之間,2 == "2"
仍會傳回 true
。
2 == 2
> true
2 == "2"
> true
!=
也是如此,只有當比較的運算元「不」平均時,才會傳回 true
。
2 != 3
> true
2 != "2"
> false
使用 ===
或 !==
的嚴格比較不會執行類型強制轉換。為了讓評估與 true
的精確比較,比較的值必須具有相同的資料類型。因此,2 == "2"
會傳回 true
,但 2 === "2"
會傳回 false
:
2 === 3
> false
2 === "2"
> false
如要移除可能導致自動強制轉換的模糊性,請盡可能使用 ===
。
運算子 | 說明 | 使用方式 | 結果 |
---|---|---|---|
=== | 等於 | 2 = = 2 | true |
!== | 不等於 | 2 !==「2」 | true |
== | 等於 (或「兩者相等」) | 2 ==「2」 | true |
!= | 不等於 | 2 !=「3」 | true |
> | 大於 | 3 > 2 | true |
>= | 大於或等於 | 2 >= 2 | true |
< | 小於 | 2 < 3 | true |
<= | 小於或等於 | 2 <= 3 | true |
真心不騙
JavaScript 中的所有值都隱含 true
或 false
,且可強制轉換成對應的布林值,例如使用「鬆開」比較器。少數值會強制轉換為 false
:
0
null
undefined
NaN
- 空字串 (
""
)
所有其他值都會強制轉換為 true
,包括包含一或多個字元和所有非零數字的任何字串。這些屬性通常稱為「Ttruthy」和「falsy」值。
"My string" == true
> true
100 == true
> true
0 == true
> false
邏輯運算子
您可以使用 AND (&&
)、OR (||
) 和 NOT (!
) 運算子,根據兩個以上條件陳述式的評估結果來控制指令碼流:
2 === 3 || 5 === 5;
> true
2 === 2 && 2 === "2"
> false
2 === 2 && !"My string."
> false
邏輯 NOT (!
) 運算式會否定運算元的三角或空心值,並在運算元評估為 false
時評估為 true
;如果運算元評估為 true
,則為 false
:
true
> true
!true
> false
!false
> true
在另一個資料類型 (例如數字或字串) 前方使用「NOT」邏輯運算子 (!
),會將該值強制轉換成布林值,並反轉結果的三分之一或偶數值。
"string"
> "string"
!"string"
> false
0
> 0
!0
> true
常見的做法是使用兩個 NOT 運算子,將資料快速強制對應至相符的布林值:
!!"string"
> true
!!0
> false
邏輯 AND 和 OR 運算子不會單獨執行任何強制轉換。查詢器會傳回接受評估的兩個運算元之一的值,並由該運算決定選擇的運算元。
邏輯 AND (&&
) 只有在該運算元評估為 false
時,才會傳回第二個運算元,否則傳回第二個運算元。在評估與布林值比較的情況下,只有在邏輯 AND 值兩側的運算元評估為 true
時,系統才會傳回 true
。如果任一端評估為 false
,則會傳回 false
。
true && false
> false
false && true
> false
false && false
> false
true && true
> true
當 &&
與兩個非布林運算元搭配使用時,如果第一個運算元可強制轉換成 false
,會傳回不會變更的第一個運算元。如果第一個運算元可強制轉換為 true
,則第二個運算元不會變更:
false && "My string"
> false
null && "My string"
> null
"My string" && false
> false
"My string" && "My second string"
> "My second string"
2 === 2 && "My string"
> "My string"
邏輯 OR (||
) 只有在該運算元評估為 true
時,才會傳回第二個運算元,否則傳回第二個運算元。在評估與布林值比較的情況下,這表示如果有任一運算元評估為 true
,且這兩個運算元都評估為 true
,就會傳回 false
:true
true || false
> true
false || true
> true
true || true
> true
false || false
> false
將 ||
與兩個非布林運算元搭配使用時,如果可強制轉換為 true
,會傳回第一個未變更的運算元。如果第一個運算元可強制轉換為 false
,則第二個運算元不會變更:
false || "My string"
> "My string"
null || "My string"
> "My string"
"My string" || false
> "My string"
"My string" || "My second string"
> "My string"
2 === 2 || "My string"
> true
Nullish Coalescing 運算子
已在 ES2020 中引入,只有在該運算元具有 null
或 undefined
以外的任何值時,「空值 Coalescing 運算子」(??
) 才會傳回第一個運算元。否則,會傳回第二個運算元。
null ?? "My string"
> "My string"
undefined ?? "My string"
> "My string"
true ?? "My string";
> true
??
與邏輯 OR 類似,但第一個運算元的評估方式較為嚴格。||
會針對任何可強制轉換為 false
的運算式 (包括 undefined
和 null
) 傳回第二個運算元。當第一個運算元是 null
或 undefined
時,??
會傳回第二個運算元,即使其可強制轉換為 false
也一樣:
0 ?? "My string";
> 0
false ?? "My string";
> false
undefined ?? "My string";
> "My string"
邏輯指派運算子
使用指派運算子,將第二個運算子的值指派給第一個運算子。最常見的例子是單等號 (=
),用來將值指派給宣告的變數。
使用邏輯指派運算子,根據該變數的三分之一或偶數值,有條件地將值指派給變數。
邏輯 AND 指派 (&&=
) 運算子會評估第二個運算元,並在第一個運算元評估為 true
時指派第一個運算元。實際上,「如果第一個運算元為 true,則改為指派第二個運算元的值:」
let myVariable = false;
myVariable &&= 2 + 2;
> false
myVariable = true;
myVariable &&= 2 + 2;
> 4
第一個運算元的三極或瘋狂值會決定指派是否執行。不過,如果您嘗試使用比較運算子評估第一個運算元,則會產生 true
或 false
布林值,因此無法指派值:
let myVariable = 5;
myVariable > 2 &&= "My string"
> SyntaxError: Invalid left-hand side in assignment
邏輯 OR 指派 (||=
) 運算子會評估第二個運算元,並在第一個運算元評估為 false
時指派給第一個運算元,實際上「如果第一個運算元為 false,則改為指派第二個運算元的值:」
let myVariable = false;
myVariable ||= 2 + 2;
> 4
myVariable = true;
myVariable ||= 2 + 2;
> true
隨堂測驗
哪一個運算子表示「嚴格等於」?
===
==
=
!=