比較演算子

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

2 + 2 === 4
> true

型の強制変換と等価性

最もよく使用される比較演算子には、緩い等価性を表す == と厳密な等価性を表す === があります。== は、可能であればオペランドを一致するデータ型に強制変換することで、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 つ以上の条件文の評価に基づいてスクリプトのフローを制御します。


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

論理演算子 AND と 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 番目のオペランドを返します。ブール値に評価される比較では、いずれかのオペランドが 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 で導入された「nullish coalescing 演算子」(??)は、オペランドに null または undefined 以外の値がある場合にのみ、最初のオペランドを返します。それ以外の場合は、2 番目のオペランドを返します。

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

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

true ?? "My string";
> true

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

0 ?? "My string";
> 0

false ?? "My string";
> false

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

論理代入演算子

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

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

論理 AND 代入(&&=)演算子は、2 番目のオペランドを評価し、最初のオペランドが true と評価された場合にのみ、最初のオペランドに代入します。つまり、「最初のオペランドが true の場合、代わりに 2 番目のオペランドの値を代入します」ということになります。

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 代入(||=)演算子は、第 2 オペランドを評価し、第 1 オペランドが false と評価された場合に第 1 オペランドに代入します。これは、実質的に「第 1 オペランドが false の場合は、代わりに第 2 オペランドの値を代入します」という意味です。

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

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

理解度を確認する

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

===
==
=
!=