目次
先日後輩の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演算のように振る舞います。
何気なく慣用句的に使っているコードも調べてみると、アハ体験ができて嬉しいです。