論理演算子

論理演算子は、通常は真偽(論理)値と一緒に使用され、その場合は真偽値が返されます。 ただし、&&||の演算子は、実際にはオペランドのどちらか一方の値を返すため、 もしこれらの演算子が非真偽値に使用された場合は、非真偽値の値が返される可能性があります。

説明

下記のテーブルで、各論理演算子について説明しています。

演算子 説明
論理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を返します。

falseに変換することの出来る式の例として、 null、0、空文字列("")、undefinedなどが挙げられます。

&&||演算子は、真偽値ではない値に使用することが可能であるにもかかわらず、 戻り値が常に真偽値に変換されるため、真偽値演算子であるとみなされます。

短絡(Short-Circuit)評価

論理式は左から右へ評価されるため、下記のルールを利用して、 短絡評価による検証が可能です。

  • false && (任意)は、短絡評価によりfalseとなります。
  • true || (任意)は、短絡評価によりtrueとなります。

この論理ルールは、上記の評価が常にこの結果になることを保証します。 上記式の「任意」の部分は評価(処理が実行)されないため、 それが副作用にならないように注意してください。 また、「任意」の部分が何からの単一の論理式であることにも注意してください。 (丸括弧によってその事を指定)

例えば、下記の2つの関数は同じように処理が行われます。

function shortCircuitEvaluation() {
  doSomething() || doSomethingElse()
}

function equivalentEvaluation() {
  var flag = doSomething();
  if (!flag) {
    doSomethingElse();
  }
}

ただし、下記の1行目の式では演算子の優先順位に沿った処理が行われておらず、 2行目のように演算子の右側を単一の式にする(丸括弧でグループ化)必要性を強調しておきます。

false && true || true       // returns true
false && (true || true)     // returns false

論理AND (&&)

下記のコードは、&&(論理AND)演算子の使用例になります。

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

論理OR (||)

下記のコードは、||(論理OR)演算子の使用例になります。

o1 = true  || true      // t || t returns true
o2 = false || true      // f || t returns true
o3 = true  || false     // t || f returns true
o4 = false || (3 == 4)  // f || f returns false
o5 = "Cat" || "Dog"     // t || t returns "Cat"
o6 = false || "Cat"     // f || t returns "Cat"
o7 = "Cat" || false     // t || f returns "Cat"

論理NOT (!)

下記のコードは、!(論理NOT)演算子の使用例になります。

n1 = !true              // !t returns false
n2 = !false             // !f returns true
n3 = !"Cat"             // !t returns false

変換ルール

ANDからORへ変換

真偽値を伴う下記の処理は、

bCondition1 && bCondition2

常に下記の結果と等しくなります。

!(!bCondition1 || !bCondition2)
ORからANDへ変換

下記の真偽値を伴う処理は、

bCondition1 || bCondition2

常に下記の結果と等しくなります。

!(!bCondition1 && !bCondition2)

入れ子丸括弧の削除

論理式は左から右へ評価されるため、 下記のルールに則り、常に複雑な式から丸括弧を削除することが可能です。

入れ子のANDを削除

下記の真偽値を伴う複合処理は、

bCondition1 || (bCondition2 && bCondition3)

常に下記の結果と等しくなります。

bCondition1 || bCondition2 && bCondition3
入れ子のORを削除

下記の真偽値を伴う複合処理は、

bCondition1 && (bCondition2 || bCondition3)

常に下記の結果と等しくなります。

!(!bCondition1 || !bCondition2 && !bCondition3)

仕様

ブラウザ互換性

デスクトップ
機能 Chrome Firefox
(Gecko)
IE Opera Safari
基本
モバイル
機能 Android Chrome for
Android
Firefox
Mobile
IE
Mobile
Opera
Mobile
Safari
Mobile
基本

関連項目

 Back to top

© 2017 Mozilla Contributors
Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.

このページは、ページトップのURL先のMozilla Developer Network(以下、MDN)のコンテンツを翻訳した内容を基に構成されています。 構成について異なる点も含まれますので、下記の項目を確認し、必要に応じて元のコンテンツをご確認ください。 もし、誤訳などの間違いを見つけましたら、 @tomofまで教えていただければ幸いです。

  • 特定のブラウザに特化しすぎている情報やあまりにも古い情報、 または試験的に導入されているようなAPIや機能については、省略していることがあります。
  • 例やデモについて、実際にページ内で動作させる関係で一部ソースコードを変更している場合や、 その例で使用しているコンテンツの単語や文章などを日本人向けに変更しいてる場合があります。
  • MDNの更新頻度が高いため、元のコンテンツと比べ情報が古くなっている可能性があります。
  • "訳注:"などの断わりを入れた上で、日本人向けの情報の追記を行っている事があります。