比較運算子

比較運算子會比較兩個運算元的值,並評估這些運算元形成的陳述式是 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 中的所有值都隱含 truefalse,且可強制轉換成對應的布林值,例如使用「鬆開」比較器。少數值會強制轉換為 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,就會傳回 falsetrue

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 中引入,只有在該運算元具有 nullundefined 以外的任何值時,「空值 Coalescing 運算子」(??) 才會傳回第一個運算元。否則,會傳回第二個運算元。

null ?? "My string"
> "My string"

undefined ?? "My string"
> "My string"

true ?? "My string";
> true

?? 與邏輯 OR 類似,但第一個運算元的評估方式較為嚴格。|| 會針對任何可強制轉換為 false 的運算式 (包括 undefinednull) 傳回第二個運算元。當第一個運算元是 nullundefined 時,?? 會傳回第二個運算元,即使其可強制轉換為 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

第一個運算元的三極或瘋狂值會決定指派是否執行。不過,如果您嘗試使用比較運算子評估第一個運算元,則會產生 truefalse 布林值,因此無法指派值:

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

隨堂測驗

哪一個運算子表示「嚴格等於」?

===
==
=
!=