比較運算子

比較運算子會比較兩個運算元的值,並評估 陳述式為 truefalse。以下範例使用 嚴格等號運算子 (===):比較兩個運算元:運算式 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,包括任何包含一或多個值的字串 字元和所有非零的數字。通常稱為「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 年推出, 「空值合併運算子」(??) 只會傳回第一個運算元 運算元具有 nullundefined 以外的任何值。如果沒有,則會傳回 第二個運算元

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

隨堂測驗

哪一個運算子代表「嚴格相等」?

=
!=
==
===