比較演算子は、2 つのオペランドの値を比較し、それらが形成するステートメントが true
か false
かを評価します。次の例では、厳密な等価性演算子(===
)を使用して、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 に似ていますが、最初のオペランドの評価方法が厳格です。||
は、undefined
や null
など、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
理解度を確認する
「厳密に等しい」ことを示す演算子はどれですか。
===
==
=
!=