論理演算子
論理演算子は、通常は真偽(論理)値と一緒に使用され、その場合は真偽値が返されます。
ただし、&&
と||
の演算子は、実際にはオペランドのどちらか一方の値を返すため、
もしこれらの演算子が非真偽値に使用された場合は、非真偽値の値が返される可能性があります。
説明
下記のテーブルで、各論理演算子について説明しています。
演算子 | 説明 |
---|---|
論理AND(&& ) |
expr1が |
論理OR(|| ) |
expr1が |
論理NOT(! ) |
その単一オペランドが |
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
変換ルール
入れ子丸括弧の削除
論理式は左から右へ評価されるため、 下記のルールに則り、常に複雑な式から丸括弧を削除することが可能です。
仕様
ブラウザ互換性
機能 | Chrome | Firefox (Gecko) |
IE | Opera | Safari |
---|---|---|---|---|---|
基本 | ◯ | ◯ | ◯ | ◯ | ◯ |
機能 | Android | Chrome for Android |
Firefox Mobile |
IE Mobile |
Opera Mobile |
Safari Mobile |
---|---|---|---|---|---|---|
基本 | ◯ | ◯ | ◯ | ◯ | ◯ | ◯ |
関連項目
© 2017 Mozilla Contributors
Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
このページは、ページトップのURL先のMozilla Developer Network(以下、MDN)のコンテンツを翻訳した内容を基に構成されています。 構成について異なる点も含まれますので、下記の項目を確認し、必要に応じて元のコンテンツをご確認ください。 もし、誤訳などの間違いを見つけましたら、 @tomofまで教えていただければ幸いです。
- 特定のブラウザに特化しすぎている情報やあまりにも古い情報、 または試験的に導入されているようなAPIや機能については、省略していることがあります。
- 例やデモについて、実際にページ内で動作させる関係で一部ソースコードを変更している場合や、 その例で使用しているコンテンツの単語や文章などを日本人向けに変更しいてる場合があります。
- MDNの更新頻度が高いため、元のコンテンツと比べ情報が古くなっている可能性があります。
- "訳注:"などの断わりを入れた上で、日本人向けの情報の追記を行っている事があります。