--- title: 論理演算子 slug: Web/JavaScript/Reference/Operators/Logical_Operators tags: - JavaScript - Operator translation_of: Web/JavaScript/Reference/Operators translation_of_original: Web/JavaScript/Reference/Operators/Logical_Operators ---
{{ 原語併記("論理演算子", "Logical operators") }} は、基本的に真偽(論理)値とともに用いられ真偽値を返します。しかし、&& および || 演算子は真偽値ではない値も使うことができるため、その場合は、真偽値ではない値を返すことがあります。その場合の考え方は以下の「説明」の欄の記載の通りとなります。
論理演算子を以下の表で説明します。:
| 演算子 | 使用法 | 説明 |
|---|---|---|
論理 AND(&&) |
expr1 && expr2 |
expr1 を false と見ることができる場合は、expr1 を返します。そうでない場合は、expr2 を返します。したがって、真偽値と共に使われた場合、 演算対象の両方が true ならば、&& は、true を返し、そうでなければ、false を返します。 |
論理 OR (||) |
expr1 || expr2 |
expr1 を true と見ることができる場合は、expr1 を返します。そうでない場合は、expr2 を返します。したがって、真偽値と共に使われた場合、 演算対象のどちらかが true ならば、|| は、true を返し、両方とも false の場合は、false を返します。 |
論理 NOT (!) |
!expr |
単一の演算対象が true と見ることができる場合は、false を返します。そうでない場合は、true を返します。 |
true に変換できる値は、いわゆる {{Glossary("truthy")}} です。false に変換できる値は、いわゆる {{Glossary("falsy")}} です。
false と見ることができる式の例は、null、0、空文字列 ("")、あるいは、undefined と評価されるものです。
&& と || 演算子が真偽値ではない値である演算対象とともに用いることができても、それらは、真偽演算子と考えることができます。なぜなら、それらの戻り値は、常に、真偽値と見ることができるからです。
論理演算子は左から右へ評価されるため、論理演算子で左辺を評価した時点で論理式の結果が確定した場合には右辺の評価を行わないことを、ショートサーキット評価といいます。例えば、A && Bという論理式があった場合、Aがfalseなら、その時点で式全体の結果はfalseで確定するため、Bがどうであるかについてはチェックしません。:
false && (anything) をショートサーキット評価すると、false になります。true || (anything) をショートサーキット評価すると、true になります。上記の式の anything の部分は評価されません。また、上記の式の anything の部分は (括弧で示しているとおり) ひとつの論理式ですので注意してください。
例えば、以下の 2 つの関数は等価です。
function shortCircuitEvaluation() {
doSomething() || doSomethingElse()
}
function equivalentEvaluation() {
var flag = doSomething();
if (!flag) {
doSomethingElse();
}
}
しかし、以下の式は等価ではありません。これは演算子の優先順位のためであり、右側の演算子をひとつの式にする (必要に応じて括弧でグループ化する) 必要性の重要度を高めています。
false && true || true // true を返す false && (true || true) // false を返す
&&)以下のコードは、&& (論理 AND) 演算子の例を示しています。
a1 = true && true // t && t true を返します。 a2 = true && false // t && f false を返します。 a3 = false && true // f && t false を返します。 a4 = false && (3 == 4) // f && f false を返します。 a5 = "Cat" && "Dog" // t && t "Dog" を返します。 a6 = false && "Cat" // f && t false を返します。 a7 = "Cat" && false // t && f false を返します。
||)以下のコードは、|| (論理 OR) 演算子の例を示しています。
o1 = true || true // t || t true を返します。 o2 = false || true // f || t true を返します。 o3 = true || false // t || f true を返します。 o4 = false || (3 == 4) // f || f false を返します。 o5 = "Cat" || "Dog" // t || t "Cat" を返します。 o6 = false || "Cat" // f || t "Cat" を返します。 o7 = "Cat" || false // t || f "Cat" を返します。
!)以下のコードは、! (論理 NOT) 演算子の例を示しています。
n1 = !true // !t false を返します。 n2 = !false // !f true を返します。 n3 = !"Cat" // !t false を返します。
Boolean について以下の演算を行います:
bCondition1 && bCondition2
これは以下の演算と等価です:
!(!bCondition1 || !bCondition2)
Boolean について以下の演算を行います:
bCondition1 || bCondition2
これは以下の演算と等価です:
!(!bCondition1 && !bCondition2)
Boolean について以下の演算を行います:
!!bCondition
これは以下の演算と等価です:
bCondition
論理演算子は左から右へ評価されるため、複雑な式の中にある括弧をいくつかの規則に従って削除することができます。
Boolean について以下の複雑な演算を行います:
bCondition1 || (bCondition2 && bCondition3)
これは以下の演算と等価です:
bCondition1 || bCondition2 && bCondition3
Boolean について以下の複雑な演算を行います:
bCondition1 && (bCondition2 || bCondition3)
これは以下の演算と等価です:
!(!bCondition1 || !bCondition2 && !bCondition3)
| 仕様書 | 策定状況 | コメント |
|---|---|---|
| {{SpecName('ES1')}} | {{Spec2('ES1')}} | 最初期の定義 |
| {{SpecName('ES5.1', '#sec-11.11')}} | {{Spec2('ES5.1')}} | 仕様書内のいくつかのセクションで定義: Logical NOT Operator, Binary Logical Operators |
| {{SpecName('ES6', '#sec-binary-logical-operators')}} | {{Spec2('ES6')}} | 仕様書内のいくつかのセクションで定義: Logical NOT Operator, Binary Logical Operators |
| {{SpecName('ESDraft', '#sec-binary-logical-operators')}} | {{Spec2('ESDraft')}} | 仕様書内のいくつかのセクションで定義: Logical NOT Operator, Binary Logical Operators |
| 機能 | Chrome | Firefox (Gecko) | Internet Explorer | Opera | Safari |
|---|---|---|---|---|---|
論理 AND (&&) |
{{CompatVersionUnknown}} | {{CompatVersionUnknown}} | {{CompatVersionUnknown}} | {{CompatVersionUnknown}} | {{CompatVersionUnknown}} |
論理 OR (||) |
{{CompatVersionUnknown}} | {{CompatVersionUnknown}} | {{CompatVersionUnknown}} | {{CompatVersionUnknown}} | {{CompatVersionUnknown}} |
論理 NOT (!) |
{{CompatVersionUnknown}} | {{CompatVersionUnknown}} | {{CompatVersionUnknown}} | {{CompatVersionUnknown}} | {{CompatVersionUnknown}} |
| 機能 | Android | Chrome for Android | Firefox Mobile (Gecko) | IE Mobile | Opera Mobile | Safari Mobile |
|---|---|---|---|---|---|---|
論理 AND (&&) |
{{CompatVersionUnknown}} | {{CompatVersionUnknown}} | {{CompatVersionUnknown}} | {{CompatVersionUnknown}} | {{CompatVersionUnknown}} | {{CompatVersionUnknown}} |
論理 OR (||) |
{{CompatVersionUnknown}} | {{CompatVersionUnknown}} | {{CompatVersionUnknown}} | {{CompatVersionUnknown}} | {{CompatVersionUnknown}} | {{CompatVersionUnknown}} |
論理 NOT (!) |
{{CompatVersionUnknown}} | {{CompatVersionUnknown}} | {{CompatVersionUnknown}} | {{CompatVersionUnknown}} | {{CompatVersionUnknown}} | {{CompatVersionUnknown}} |