目次
先日後輩のJSについての相談を受けていたとき、以下のような書き方をみて「こんな感じに書けるんですねー」と言われました。
window.hoge = default_hoge || {};
結構、普段から使ったりはしていますが、なぜ、これが「default_hogeがundefinedやnilだったら{}
にする」という意味になるのか、明確に答えられなかったので、そのことについて調べてみました。
||
は脳内で「or」って呼んだりしますが、実際、意味はorとは限らないようです。そもそも Bool型を返すとは限らない ので論理演算と呼ぶこと自体が違うのかもしれません。
実際は||
は左側がfalse, 0, undefined, null, '', NaN
だったとき、右側の値を返し、それ以外は左側の値を返すという演算です。
上の例の場合ではdefault_hoge
がfalse, 0, undefined, null, '', NaN
だった場合、||
の右側にある{}
をwindow.hoge
を代入することになります。また、default_hogeにそれ以外の値が入っていた場合、そのままwindow.hogeに代入されます。
false || true
という記述の場合、true
になるため、あたかもor
であるかのように振る舞うということのようです。
&&
も似たようなものです。
左側がfalse, 0, undefined, null, '', NaN
以外 だったとき、右側の値を返し、それ以外は左側の値を返すという演算になります。
この結果、false && true
は左側が返りfalse, true && true
は右側の値が返り、falseというand演算のように振る舞います。
何気なく慣用句的に使っているコードも調べてみると、アハ体験ができて嬉しいです。