node test.js
ってな感じで動かしたまとめ。
結論から
nullとundefinedは厳密に(===
)比較しような。
ANDとOR
最後に評価されたものが返ってくる。
AND
true && undefined
左がtrueなので右のundefinedが最後に評価される。undefined。
undefined && true
undefinedはfalse扱いのため、左で短絡評価される。undefined。
false && undefined
左で短絡評価される。false。
undefined && false
左で短絡評価される。undefined。
null && undefined
左で短絡評価される。null。
undefined && null
左で短絡評価される。undefined。
OR
true || undefined
左で短絡評価される。true。
undefined || true
左がfalse扱いされるのでtrueが評価される。true。
false || undefined
左がfalseなので右のundefinedが最後に評価される。undefined。
undefined || false
左がfalse扱いされるので右のfalseが最後に評価される。false。
null || undefined
左がfalse扱いされるので右のundefinedが最後に評価される。undefined。
undefined || null
左がfalse扱いされるので右のnullが最後に評価される。null。
等値比較
特に書いてないものは、==
と===
で結果が変わらないもの。
true == undefined
順当にfalse。ひっくり返しても同じ。
false == undefined
undefinedはfalse扱いされるけど、これはfalse。
なお、0 == false
と"" == false
はtrue。
true != undefined
false != undefined
上記二つをひっくり返した結果になるだけ。true。
null == undefined
true。
null != undefined
上記をひっくり返しただけ。false。
null === undefined
厳密に比較するとfalseになる。
null !== undefined
上記をひっくり返しただけ。true。
undefined == undefined
trueになってくれないと困る! true。
大小
なにとどう比較してみてもfalseになるっぽい。
付録
!(undefined)
でtrueに、!!(undefined)
でfalseに変換できる。