BFE.devでのAI解答例 - JavaScript クイズ
35. Implicit Coercion III
以下はコードの出力結果です:
[object Object]
NaN
0
[object Object]
[object Object]
[object Object]
[object Object]
NaN
[object Object][object Object]
[object Object][object Object][object Object]
それぞれの式を解釈しましょう。
-
[] + {}
: 配列とオブジェクトは異なる型であるため、この式では最初に記述された配列が文字列に変換され、空の文字列となります。そして、オブジェクトは文字列 "[object Object]" に変換されます。つまり、この式の出力結果は "[object Object]" になります。 -
+ {}
: オブジェクトは文字列に変換されることはありませんが、この式では+
の前置演算子によって変換されようとします。しかし、このオブジェクトには数値表現がないため、結果は NaN になります。 -
+ []
: 空の配列を数値に変換するとき、結果は常に0になります。したがって、この式の出力結果は0になります。 -
{} + []
: オブジェクトと配列を加算することはできないため、この式では{}
が不要という理由で無視されます。そして、配列は空の文字列に変換されます。したがって、この式の出力結果は "[object Object]" となります。 -
({}) + []
: オブジェクトと配列を加算することはできないため、この式でも{}
が無視されます。そして、配列は空の文字列に変換され、オブジェクトは文字列 "[object Object]" に変換されます。つまり、この式の出力結果は "[object Object]" になります。 -
({}) + [] + []
: この式でも{}
が無視され、配列は空の文字列に変換されます。 この式は前の式と同じように処理されます。そのため、結果は "[object Object]" になります。 -
{} + + []
:+ []
の結果と同じく、空の配列を数値に変換すると 0 になります。しかし、加算演算子+
がオブジェクトと数値を結合するとき、オブジェクトは"[object Object]"
として文字列に変換されますが、数値は数値のままです。したがって、この式の出力結果はNaN
になります。 -
{} + + [] + {}
: 前の式を拡張するため、空のオブジェクト{}
も文字列"[object Object]"
に変換されます。この式全体としては文字列が連結されます。したがって、この式の出力結果は "[object Object][object Object]" になります。 -
{} + + [] + {} + + []
: 前の式を拡張するため、空の配列を数値に変換すると 0 になります。そして、オブジェクトは"[object Object]"
に変換されます。最終的に、この式の出力結果は "[object Object][object Object][object Object]" になります。