比較演算子は、2 つのオペランドの値を比較し、それが形成するステートメントが true
と false
のどちらであるかを評価します。次の例では、厳密な等価演算子(===
)を使用して、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
に強制変換できる式の(undefined
や null
など)の 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
理解度をチェックする
「厳密に等しい」ことを示す演算子はどれですか。
===
==
=
!=