
概要:このチュートリアルでは、論理否定演算子(!
)、論理積演算子(&&
)、論理和演算子(||
)を含む、JavaScript の論理演算子の使用方法を学びます。
論理演算子は、JavaScript では変数の比較を行い、その結果に基づいて処理を行うことができるため重要です。
例えば、比較の結果がtrue
であれば、コードブロックを実行し、false
であれば別のコードブロックを実行できます。
JavaScript は3つの論理演算子を提供します。
- ! (論理否定)
- || (論理和)
- && (論理積)
1) 論理否定演算子 (!)
JavaScript は、感嘆符!
を使用して論理否定演算子を表現します。!
演算子は、ブール値だけでなく、あらゆる型の単一の値に適用できます。
ブール値に!
演算子を適用すると、値がfalse
であればtrue
を返し、その逆も同様です。例:
let eligible = false,
required = true;
console.log(!eligible);
console.log(!required);
Code language: JavaScript (javascript)
出力
true
false
Code language: JavaScript (javascript)
この例では、eligible
はtrue
なので、!eligible
はfalse
を返します。そして、required
はtrue
なので、!required
はfalse
を返します。
ブール値以外の値に!
演算子を適用した場合、!
演算子は値をブール値に変換してから否定します。
次の例は、!
演算子の使用方法を示しています。
!a
論理!
演算子は、次のルールに基づいて動作します。
a
がundefinedの場合、結果はtrue
です。a
がnullの場合、結果はtrue
です。a
が0
以外の数値の場合、結果はfalse
です。a
がNaNの場合、結果はtrue
です。a
がオブジェクトの場合、結果はfalse
です。a
が空文字列の場合、結果はtrue
です。a
が空でない文字列の場合、結果はfalse
です。
以下は、ブール値以外の値に論理!
演算子を適用した場合の結果を示しています。
console.log(!undefined); // true
console.log(!null); // true
console.log(!20); //false
console.log(!0); //true
console.log(!NaN); //true
console.log(!{}); // false
console.log(!''); //true
console.log(!'OK'); //false
console.log(!false); //true
console.log(!true); //false
Code language: JavaScript (javascript)
二重否定 (!!)
コードでは、二重否定 (!!
) を見かけることがあります。!!
は、論理否定演算子 (!
) を2回使用して、値を実際のブール値に変換します。
結果は、Boolean()関数を使用した場合と同じです。例:
let counter = 10;
console.log(!!counter); // true
Code language: JavaScript (javascript)
最初の!
演算子は、counter
変数のブール値を否定します。counter
がtrue
の場合、!
演算子はそれをfalse
にし、その逆も同様です。
2番目の!
演算子は、最初の!
演算子の結果を否定し、counter
変数の実際のブール値を返します。
2) 論理積演算子 (&&)
JavaScript は、二重アンパサンド (&&
) を使用して論理積演算子を表現します。次の式は&&
演算子を使用しています。
let result = a && b;
Code language: JavaScript (javascript)
a
をtrue
に変換できる場合、&&
演算子はb
を返し、それ以外の場合はa
を返します。このルールは、すべてのブール値に適用されます。
次の真理値表は、2つのブール値に&&
演算子を適用した場合の結果を示しています。
a | b | a && b |
---|---|---|
true | true | true |
true | false | false |
false | true | false |
false | false | false |
&&
演算子の結果は、両方の値がtrue
の場合のみtrue
であり、それ以外の場合はfalse
です。例:
let eligible = false,
required = true;
console.log(eligible && required); // false
Code language: JavaScript (javascript)
この例では、eligible
はfalse
であるため、式eligible && required
の値はfalse
です。
次の例を参照してください。
let eligible = true,
required = true;
console.log(eligible && required); // true
Code language: JavaScript (javascript)
この例では、eligible
とrequired
の両方がtrue
であるため、式eligible && required
の値はtrue
です。
短絡評価
&&
演算子は短絡評価されます。これは、式 の値を決定するのに最初の値だけで十分な場合、&&
演算子は2番目の値を評価しないことを意味します。例:
let b = true;
let result = b && (1 / 0);
console.log(result);
Code language: JavaScript (javascript)
出力
Infinity
Code language: JavaScript (javascript)
この例では、b
はtrue
であるため、&&
演算子は2番目の式 (1/0
) をさらに評価せずに結果を決定できません。
結果はInfinity
であり、これは式 (1/0
) の結果です。しかし、
let b = false;
let result = b && (1 / 0);
console.log(result);
Code language: JavaScript (javascript)
出力
false
Code language: JavaScript (javascript)
この場合、b
はfalse
であるため、&&
演算子は、最初の値に基づいて最終結果をfalse
として決定できるため、2番目の式を評価する必要はありません。
&&
演算子の連鎖
次の式は、複数の&&
演算子を使用しています。
let result = value1 && value2 && value3;
Code language: JavaScript (javascript)
&&
演算子は、次の動作をします。
- 左から右に値を評価します。
- 各値について、ブール値に変換します。結果が
false
の場合、停止して元の値を返します。 - すべての値が真値の場合、最後の値を返します。
言い換えれば、&&
演算子は、最初の偽値または最後の真値を返します。
値をtrue
に変換できる場合、それは真値と呼ばれます。値をfalse
に変換できる場合、それは偽値と呼ばれます。
3) 論理和演算子 (||)
JavaScript は、二重パイプ||
を使用して論理和演算子を表現します。||
演算子は、あらゆる型の2つの値に適用できます。
let result = a || b;
Code language: JavaScript (javascript)
a
をtrue
に変換できる場合、a
を返し、それ以外の場合はb
を返します。このルールはブール値にも適用されます。
次の真理値表は、オペランドの値に基づいて||
演算子の結果を示しています。
a | b | a || b |
---|---|---|
true | true | true |
true | false | true |
false | true | true |
false | false | false |
||
演算子は、両方の値がfalse
と評価される場合のみfalse
を返します。いずれかの値がtrue
の場合、||
演算子はtrue
を返します。例:
let eligible = true,
required = false;
console.log(eligible || required); // true
Code language: JavaScript (javascript)
別の例を見てみましょう。
let eligible = false,
required = false;
console.log(eligible || required); // false
Code language: JavaScript (javascript)
この例では、式eligible || required
は、両方の値がfalse
であるためfalse
を返します。
||
演算子も短絡評価されます。
&&
演算子と同様に、||
演算子も短絡評価されます。つまり、最初の値がtrue
と評価された場合、&&
演算子は2番目の値を評価しません。
||
演算子の連鎖
次の例は、式で複数の||
演算子を使用する方法を示しています。
let result = value1 || value2 || value3;
Code language: JavaScript (javascript)
||
演算子は、次の動作をします。
- 左から右に値を評価します。
- 各値について、ブール値に変換します。変換結果が
true
の場合、停止して値を返します。 - すべての値が
false
と評価された場合、最後の値を返します。
言い換えれば、||
演算子の連鎖は、最初の真値、または真値が見つからない場合は最後の値を返します。
論理演算子の優先順位
式に論理演算子を複数組み合わせる場合、JavaScript エンジンは、指定された順序で演算子を評価します。この順序は、演算子の優先順位と呼ばれます。
言い換えれば、演算子の優先順位とは、式における論理演算子の評価順序です。
論理演算子の優先順位は、上から下へ次の順序です。
- 論理否定 (!)
- 論理積 (&&)
- 論理和 (||)
まとめ
- 否定演算子 (
!
) は、ブール値を否定します。(!!
) は、値を実際のブール値に変換します。 - AND 演算子 (
&&
) は、2 つのブール値に適用され、両方が true の場合に true を返します。 - OR 演算子 (
||
) は、2 つのブール値に適用され、オペランドのいずれかが true の場合に true を返します。 &&
と||
演算子の両方とも短絡評価されます。ブール値以外の値にも適用できます。- 論理演算子の優先順位は、上から下へ
!
、&&
、||
の順です。 - AND 演算子は、最初の偽値または最後の真値を返します。
- || 演算子は、最初の真値を返します。