--- title: 論理積 (&&) slug: Web/JavaScript/Reference/Operators/Logical_AND tags: - JavaScript - Language feature - Logical Operator - Operator - Reference - 演算子 - 言語機能 - 論理演算子 translation_of: Web/JavaScript/Reference/Operators/Logical_AND ---
論理積 (&&
) 演算子 (論理結合) をオペランドの組み合わせに対して使用すると、すべてのオペランドが true である場合に true になります。一般的には {{jsxref("Boolean")}} (論理) 値で使用されます。その場合は論理値を返します。ただし &&
演算子は実際には指定されたオペランドのうち一つの値を返すので、この演算子が論理値以外で使用された場合は、論理値以外の値を返すことになります。
expr1 && expr2
expr1
が true
に変換できる場合は expr2
を返し、それ以外の場合は expr1
を返します。
ある値が true
に変換できる場合、その値は真値 ({{Glossary("truthy")}}) と呼ばれます。ある値が false
に変換できる場合、その値は偽値 ({{Glossary("falsy")}}) と呼ばれます。
false に変換することができる式の例を示します。
null
NaN
0
""
または ''
または ``
)undefined
&&
演算子では論理値以外のオペランドを使用することができますが、返値が常に boolean プリミティブに変換することが可能であるため、論理演算子と見なすことができます。返値 (または一般的な式) を対応する論理値に明示的に変換するには、二重の否定演算子または {{jsxref("Global_Objects/Boolean/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
論理型に関する以下の操作は、
bCondition1 && bCondition2
常に以下のものと等しくなります。
!(!bCondition1 || !bCondition2)
論理型に関する以下の操作は、
bCondition1 || bCondition2
常に以下のものと等しくなります。
!(!bCondition1 && !bCondition2)
論理式は左から右に評価されるので、いくつかのルールに従って複雑な式から括弧を削除することは常に可能です。
以下の論理型に関する複合操作は、
bCondition1 || (bCondition2 && bCondition3)
常に以下のものと等しくなります。
bCondition1 || bCondition2 && bCondition3
仕様書 |
---|
{{SpecName('ESDraft', '#prod-LogicalANDExpression', 'Logical AND expression')}} |
{{Compat("javascript.operators.logical_and")}}