論理結合演算子¶
書式¶
式1 & 式2
式1 && 式2
式1 | 式2
式1 || 式2
&と|は短絡評価を行いません。
&&と||は短絡評価を行います。
解説¶
論理結合演算子は式1と式2をブール値として評価し、結果を論理的AND(演算子 &または&&)及び論理的OR(演算子 |または||)によって評価します。
論理的ANDは左辺式と右辺式を評価して共にtrueである場合のみtrueを返します。
論理的ORは左辺式と右辺式を評価してどちらか一方がtrueであればtrueを返します。それ以外の場合は共にfalseを返します。
短絡評価
&または|演算子は、左辺式と右辺式を両方評価してから、論理的ANDまたは論理的ORを行います。
&&演算子は左辺式がfalse値であった場合、右辺式を評価せずにfalseを返します。
左辺式がtrueであった場合、右辺式を評価した値をtrueまたはfalseで返します。
||演算子は左辺式がtrue値であった場合、右辺式を評価せずにtrueを返します。
左辺式がfalseであった場合、右辺式を評価した値をtrueまたはfalseで返します。
この&&または||演算子の振る舞いを短絡評価といいます。
短絡評価を用いることで右辺値の評価を抑制することができ、高速でシンプルなコードを記述することが出来ます。
(1 == 1) & (2 < 3) trueと評価
(1 == 1) & (2 > 3) falseと評価
(1 == 1) | (2 > 3) trueと評価
var a = null;
if(a instanceof Number & a.toString() == "123") {
# 左辺値に寄らず右辺値を評価してしまうため、右辺値の評価時にnull参照に対するメソッド呼び出し例外が発生してしまう。
# 安全なコードにするためには、if文を2つに分け入れ子にするか、下記の短絡評価の構文を使用する必要がある。
}
if(a instanceof Number && a.toString() == "123") {
# aがnullのため、右辺式は評価されず、例外は発生しない
}