比較演算子

比較演算子は、2 つのオペランドの値を比較し、それが形成するステートメントが truefalse のどちらであるかを評価します。次の例では、厳密な等価演算子(===)を使用して、2 つのオペランド(式 2 + 2 と値 4)を比較します。式の結果と数値 4 が同じであるため、この式は true と評価されます。

2 + 2 === 4
> true

型の強制変換と等式

最も頻繁に使用される 2 つの比較演算子は、大まかな等式を示す == と厳密な等式を示す === です。== は、可能であれば、オペランドを一致するデータ型に強制変換することで、2 つの値を大まかに比較します。たとえば、数値と文字列値の比較が行われている場合でも、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
  • 空の文字列(""

1 つ以上の文字とゼロ以外のすべての数値を含む文字列など、他のすべての値は true に強制変換されます。これらは一般に「トゥルーシー」値や「偽造」値と呼ばれます。

"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

2 つの NOT 演算子を使用して、データを一致するブール値にすばやく強制変換するのが一般的な方法です。

!!"string"
> true

!!0
> false

論理演算子と OR 演算子は、それぞれが強制型変換を行うことはありません。これらは、評価対象の 2 つのオペランドのいずれか 1 つの値を返します。選択されたオペランドはその評価によって決定されます。

論理 AND(&&)は、2 つのオペランドのうち、そのオペランドが false と評価された場合にのみ最初のオペランドを返し、そうでない場合は 2 番目のオペランドを返します。ブール値に評価される比較では、論理 AND の両側のオペランドが true に評価された場合にのみ true を返します。いずれかの側が false と評価されると、false を返します。

true && false
> false

false && true
> false

false && false
> false

true && true
> true

&& を 2 つの非ブール値オペランドとともに使用した場合、最初のオペランドが false に強制変換できる場合は、変更されずに返されます。最初のオペランドを true に強制変換できる場合、2 番目のオペランドは変更されずに返されます。

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(||)は、2 つのオペランドのうち最初のオペランドが true に評価された場合にのみ返し、2 つ目のオペランドが評価されない場合は 2 つ目のオペランドを返します。ブール値に評価される比較では、どちらかのオペランドが true と評価されると true を返し、どちらの側も true と評価された場合は false を返します。

true || false
> true

false || true
> true

true || true
> true

false || false
> false

ブール値以外の 2 つのオペランドを指定して || を使用する場合、true に強制変換できる場合は、変更されていない最初のオペランドを返します。最初のオペランドを false に強制変換できる場合、2 番目のオペランドは変更されずに返されます。

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

null 結合演算子

ES2020 で導入された「null 合体演算子」(??)は、最初のオペランドが null または undefined 以外の値を持つ場合にのみ最初のオペランドを返します。それ以外の場合は、2 番目のオペランドを返します。

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

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

true ?? "My string";
> true

?? は論理 OR と似ていますが、第 1 オペランドの評価方法が厳しくなります。|| は、false に強制変換できる式の(undefinednull など)の 2 番目のオペランドを返します。?? は、最初のオペランドが null または undefined 以外の場合、false に強制変換できる場合でも、2 番目のオペランドを返します。

0 ?? "My string";
> 0

false ?? "My string";
> false

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

論理割り当て演算子

代入演算子を使用して、2 番目の演算子の値を最初の演算子に代入します。最も一般的な例は、宣言された変数に値を割り当てるために使用される単一の等号(=)です。

論理代入演算子を使用して、変数の真正値または偽値に基づいて、条件付きで変数に値を代入します。

論理 AND 割り当て(&&=)演算子は、第 2 オペランドを評価し、第 1 オペランドが true と評価される場合にのみ第 1 オペランドに代入します。実質的には、「第 1 オペランドが真の場合、代わりに第 2 オペランドの値を代入」します。

let myVariable = false;
myVariable &&= 2 + 2;
> false

myVariable = true;
myVariable &&= 2 + 2;
> 4

第 1 オペランドの truey 値または falsy 値によって、割り当てが実行されるかどうかが決まります。ただし、比較演算子を使用して第 1 オペランドを評価しようとすると、ブール値 true または false となり、値を割り当てることができません。

let myVariable = 5;
myVariable > 2 &&= "My string"
> SyntaxError: Invalid left-hand side in assignment

論理 OR 代入(||=)演算子は、第 2 オペランドを評価し、第 1 オペランドが false と評価された場合に第 1 オペランドに代入します。実質的には、「第 1 オペランドが偽の場合、代わりに第 2 オペランドの値を代入」します。

let myVariable = false;
myVariable ||= 2 + 2;
> 4

myVariable = true;
myVariable ||= 2 + 2;
> true

理解度をチェックする

「厳密に等しい」ことを示す演算子はどれですか。

===
==
=
!=