🐙

暗黙的型変換で、なぜ { } や [ ] は Truthy値なのかを考える

2024/06/12に公開

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