JavaScript 論理演算子の入門

Javascript Logical Operator

概要:このチュートリアルでは、論理否定演算子(!)、論理積演算子(&&)、論理和演算子(||)を含む、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)

この例では、eligibletrueなので、!eligiblefalseを返します。そして、requiredtrueなので、!requiredfalseを返します。

ブール値以外の値に!演算子を適用した場合、!演算子は値をブール値に変換してから否定します。

次の例は、!演算子の使用方法を示しています。

!a

論理!演算子は、次のルールに基づいて動作します。

  • aundefinedの場合、結果はtrueです。
  • anullの場合、結果はtrueです。
  • a0以外の数値の場合、結果はfalseです。
  • aNaNの場合、結果は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変数のブール値を否定します。countertrueの場合、!演算子はそれをfalseにし、その逆も同様です。

2番目の!演算子は、最初の!演算子の結果を否定し、counter変数の実際のブール値を返します。

2) 論理積演算子 (&&)

JavaScript は、二重アンパサンド (&&) を使用して論理積演算子を表現します。次の式は&&演算子を使用しています。

let result = a && b;Code language: JavaScript (javascript)

atrueに変換できる場合、&&演算子はbを返し、それ以外の場合はaを返します。このルールは、すべてのブール値に適用されます。

次の真理値表は、2つのブール値に&&演算子を適用した場合の結果を示しています。

aba && b
truetruetrue
truefalsefalse
falsetruefalse
falsefalsefalse

&&演算子の結果は、両方の値がtrueの場合のみtrueであり、それ以外の場合はfalseです。例:

let eligible = false,
    required = true;

console.log(eligible && required); // falseCode language: JavaScript (javascript)

この例では、eligiblefalseであるため、式eligible && requiredの値はfalseです。

次の例を参照してください。

let eligible = true,
    required = true;

console.log(eligible && required); // trueCode language: JavaScript (javascript)

この例では、eligiblerequiredの両方がtrueであるため、式eligible && requiredの値はtrueです。

短絡評価

&&演算子は短絡評価されます。これは、式 の値を決定するのに最初の値だけで十分な場合、&&演算子は2番目の値を評価しないことを意味します。例:

let b = true;
let result = b && (1 / 0);
console.log(result);Code language: JavaScript (javascript)

出力

InfinityCode language: JavaScript (javascript)

この例では、btrueであるため、&&演算子は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)

この場合、bfalseであるため、&&演算子は、最初の値に基づいて最終結果を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)

atrueに変換できる場合、aを返し、それ以外の場合はbを返します。このルールはブール値にも適用されます。

次の真理値表は、オペランドの値に基づいて||演算子の結果を示しています。

aba || b
truetruetrue
truefalsetrue
falsetruetrue
falsefalsefalse

||演算子は、両方の値が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 エンジンは、指定された順序で演算子を評価します。この順序は、演算子の優先順位と呼ばれます。

言い換えれば、演算子の優先順位とは、式における論理演算子の評価順序です。

論理演算子の優先順位は、上から下へ次の順序です。

  1. 論理否定 (!)
  2. 論理積 (&&)
  3. 論理和 (||)

まとめ

  • 否定演算子 (!) は、ブール値を否定します。(!!) は、値を実際のブール値に変換します。
  • AND 演算子 (&&) は、2 つのブール値に適用され、両方が true の場合に true を返します。
  • OR 演算子 (||) は、2 つのブール値に適用され、オペランドのいずれかが true の場合に true を返します。
  • &&||演算子の両方とも短絡評価されます。ブール値以外の値にも適用できます。
  • 論理演算子の優先順位は、上から下へ!&&||の順です。
  • AND 演算子は、最初の偽値または最後の真値を返します。
  • || 演算子は、最初の真値を返します。
このチュートリアルは役に立ちましたか?