論理積 (&&) 演算子 (論理結合) をオペランドの組み合わせに対して使用すると、すべてのオペランドが true である場合に true になります。一般的には Boolean (論理) 値で使用されます。その場合は論理値を返します。ただし && 演算子は実際には指定されたオペランドのうち一つの値を返すので、この演算子が論理値以外で使用された場合は、論理値以外の値を返すことになります。
構文
expr1 && expr2
解説
expr1 が true に変換できる場合は expr2 を返し、それ以外の場合は expr1 を返します。
ある値が true に変換できる場合、その値は真値 (truthy) と呼ばれます。ある値が false に変換できる場合、その値は偽値 (falsy) と呼ばれます。
false に変換することができる式の例を示します。
nullNaN0- 空文字列 (
""または''または``) 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 の定義 |
ブラウザーの互換性
| デスクトップ | モバイル | サーバー | |||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Logical AND (&&) | Chrome 完全対応 1 | Edge 完全対応 12 | Firefox 完全対応 1 | IE 完全対応 3 | Opera 完全対応 3 | Safari 完全対応 1 | WebView Android 完全対応 1 | Chrome Android 完全対応 18 | Firefox Android 完全対応 4 | Opera Android 完全対応 10.1 | Safari iOS 完全対応 1 | Samsung Internet Android 完全対応 1.0 | nodejs 完全対応 0.1.100 |
凡例
- 完全対応
- 完全対応