論理積 (&&)

論理積 (&&) 演算子 (論理結合) をオペランドの組み合わせに対して使用すると、すべてのオペランドが true である場合に true になります。一般的には Boolean (論理) 値で使用されます。その場合は論理値を返します。ただし && 演算子は実際には指定されたオペランドのうち一つの値を返すので、この演算子が論理値以外で使用された場合は、論理値以外の値を返すことになります。

構文

expr1 && expr2

解説

expr1true に変換できる場合は expr2 を返し、それ以外の場合は expr1 を返します。

ある値が true に変換できる場合、その値は真値 (truthy) と呼ばれます。ある値が false に変換できる場合、その値は偽値 (falsy) と呼ばれます。

false に変換することができる式の例を示します。

  • null
  • NaN
  • 0
  • 空文字列 ("" または '' または ``)
  • undefined

&& 演算子では論理値以外のオペランドを使用することができますが、返値が常に boolean プリミティブに変換することが可能であるため、論理演算子と見なすことができます。返値 (または一般的な式) を対応する論理値に明示的に変換するには、二重の否定演算子または Boolean コンストラクターを使用してください。

短絡評価

論理積の式は左から右へと評価され、下記の規則を使用して「短絡」評価が可能なように評価されます。

(偽値の式) && expr は短絡評価で偽値の式に評価されます。

短絡とは、上記の expr の部分が評価されず、したがって、これを行うことの副作用が効果を及ぼさないことを意味します (例えば、 expr が関数呼び出しであった場合、この場所では呼び出されません)。これは、最初のオペランドが評価された時点で、すでに演算子の値が決定しているためです。例を示します。

function A(){ console.log('called A'); return false; }
function B(){ console.log('called B'); return true; }

console.log( A() && B() );
// 関数呼び出しによって "called A" がログ出力され、
// それから false (演算子の結果の値) が出力されます。

演算子の優先順位

以下の式は同じであるように見えるかもしれませんが、異なります。 && 演算子は || 演算子よりも先に実行されるからです (演算子の優先順位を参照)。

true || false && false      // true を返す。 && が先に実行されるため
(true || false) && false    // false を返す。演算子の優先順位が適用されないため

論理和の使用

以下のコードは && (論理積) 演算子の例を示しています。

a1 = true  && true       // t && t returns true
a2 = true  && false      // t && f returns false
a3 = false && true       // f && t returns false
a4 = false && (3 == 4)   // f && f returns false
a5 = 'Cat' && 'Dog'      // t && t returns "Dog"
a6 = false && 'Cat'      // f && t returns false
a7 = 'Cat' && false      // t && f returns false
a8 = ''    && false      // f && f returns ""
a9 = false && ''         // f && f returns false

論理型の変換規則

AND から OR への変換

論理型に関する以下の操作は、

bCondition1 && bCondition2

常に以下のものと等しくなります。

!(!bCondition1 || !bCondition2)

OR から AND への変換

論理型に関する以下の操作は、

bCondition1 || bCondition2

常に以下のものと等しくなります。

!(!bCondition1 && !bCondition2)

入れ子になった括弧の除去

論理式は左から右に評価されるので、いくつかのルールに従って複雑な式から括弧を削除することは常に可能です。

以下の論理型に関する複合操作は、

bCondition1 || (bCondition2 && bCondition3)

常に以下のものと等しくなります。

bCondition1 || bCondition2 && bCondition3

仕様書

仕様書
ECMAScript (ECMA-262)
Logical AND expression の定義

ブラウザーの互換性

BCD tables only load in the browser

関連情報