比較運算子會比較兩個運算元的值,並評估
陳述式為 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
,包括任何包含一或多個值的字串
字元和所有非零的數字。通常稱為「truthy」和
「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
,否則第二個運算元。相較之下
求出布林值,只有兩側的運算元才會傳回 true
邏輯 AND 評估為 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
,如果沒有任何邊求值為 true
,則會傳回
false
:
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
空值凝聚運算子
於 ES2020 年推出,
「空值合併運算子」(??
) 只會傳回第一個運算元
運算元具有 null
或 undefined
以外的任何值。如果沒有,則會傳回
第二個運算元
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
隨堂測驗
哪一個運算子代表「嚴格相等」?
=
!=
==
===