IF分やwhileループなどによく使われる&&と||だが、私はよく挙動を勘違いするのでメモ。
&&演算子
&&演算子は左辺の式をまず評価する。左辺の式の値がfalseに変換される場合、左辺の式をそのまま返す。右辺の値は評価しない。もし、左辺の式がtrueに変換される値の場合、右辺の式を評価し、その値を返す。
例:
false && true; // false
'' && 'foo'; // ""
2 && 0; // 0
'foo' && 4; // 4
||演算子
||演算子は左辺の式をまず評価する。もしこの式の値がtrueの場合、左辺の式をそのまま返す。右辺の値は評価しない。もし左辺の値がfalseに変換される値の場合は右辺の式を評価しこの値を返す。
例:
false && true; // true
'' && 'foo'; // 'foo'
2 && 0; // 2
'foo' && 4; // 'foo'
※注意
&&演算子と同じように、右辺の式が評価させれない場合があることを意図的に利用したい場合を除けば、副作用を伴う式を右辺の式に利用しない。
// maxWidthがtrueに変換される値であれば、この値を使う。falseに変換される値であれば、
// preferencesオブジェクトの値を使う。この値もtrueに変換される値でなければ、定数を使う。
let max = maxWidth || preferences.maxWidth || 500;
参考