
概要:このチュートリアルでは、論理否定演算子(!)、論理積演算子(&&)、論理和演算子(||)を含む、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
falseCode 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); //falseCode language: JavaScript (javascript)二重否定 (!!)
コードでは、二重否定 (!!) を見かけることがあります。!!は、論理否定演算子 (!) を2回使用して、値を実際のブール値に変換します。
結果は、Boolean()関数を使用した場合と同じです。例:
let counter = 10;
console.log(!!counter); // trueCode 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); // falseCode language: JavaScript (javascript)この例では、eligibleはfalseであるため、式eligible && requiredの値はfalseです。
次の例を参照してください。
let eligible = true,
required = true;
console.log(eligible && required); // trueCode 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)出力
InfinityCode 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)出力
falseCode 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); // trueCode language: JavaScript (javascript)別の例を見てみましょう。
let eligible = false,
required = false;
console.log(eligible || required); // falseCode 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 演算子は、最初の偽値または最後の真値を返します。
- || 演算子は、最初の真値を返します。