🐙
暗黙的型変換で、なぜ { } や [ ] は Truthy値なのかを考える
javascriptの暗黙的なBool値の型変換について、値によって true と判定されるものと、false と判定されるものに分けることができます。
判定元の値をそれぞれtruthy / falsy な値と呼びます。以下に具体例を書き出します。
// falsy な値
false
0
""(空文字列)
null
undefined
NaN
// truthy な値
"hello"(非空文字列)
1, -1, 42(非ゼロの数値)
{ key: "value" }(オブジェクト)
[1, 2, 3](配列)
function()(関数)
true
ここでふと思ったのが、空のオブジェクトや配列は({} []) truthy なのか、 falsyなのか?
結論から言うとどちらも truthy なのですが、空文字””はfalsy なのだから、空オブジェクトや空配列もfalsyなのでは?と一瞬考えてしまいました。
なぜ{}や[]がTruthyなのかというと、{}はオブジェクトが存在することを示しており、空のオブジェクトがある、ということ自体に意味を持つためです。
配列も同様です。
そのため、{}も[]も truthyと評価されます。JavaScriptでは、オブジェクトや配列が持つ内容ではなく、その存在自体がtruthy(存在する)かfalsy(存在しない)かを決定します。
確かに falsy な値を見ると、どれも存在しないことを表している値であるとわかります。
Discussion