#基本
- JavaScript の処理は左から右へ進む!
- AND / OR 演算子は2つの値を左から順に Boolean にキャストしてチェックし、どちらかの値を返す.
- Boolean を返すわけではない.
例
x = {foo:4} && null; // = null
y = 1 || window; // = 1
##AND 演算
AND 演算 a1 && a2
の返り値は Boolean(a1)===false ? a1 : a2
と等価.
AND 演算は〔先に false と判定された値〕or〔最後の値〕を返す.
計算効率を上げるために、false 判定される可能性が高い方の値を先(左)に置く.
AND_演算子(&&)
// 1 2
true && true // = true ← 2
true && false // = false ← 2
false && true // = false ← 1
false && false // = false ← 1
##OR 演算
OR 演算 a1 || a2
の返り値は Boolean(a1)===true ? a1 : a2
と等価.
OR 演算は〔先に true と判定された値〕or〔最後の値〕を返す.
計算効率を上げるために、true 判定される可能性が高い方の値を先(左)に置く.
OR_演算子(||)
// 1 2
true || true // = true ← 1
true || false // = true ← 1
false || true // = true ← 2
false || false // = false ← 2
#応用: 論理演算をたくさん直列した場合
JavaScript の処理は左から右へ進むので、まず最も左の演算子が評価される。
その返り値に基づき次の演算子が評価され、右へと進んでいく。
例-1
a || b && c && d && e || f && g || h
=((((((a || b)&& c)&& d)&& e)|| f)&& g)|| h
例-2
// 1 2 3 4
undefined && true || 0 && [6] // = 0 ← 3
=(undefined && true)|| 0 && [6]
= undefined || 0 && [6]
=(undefined || 0 )&& [6]
= 0 && [6]
= 0
上記の例のように括弧を一切使わずに論理演算を直列すると、必ず全ての値がチェックされることになるので計算効率が悪い。
各値が true / false 判定される確率を考慮し、適切に括弧で括るべき.