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]" になります。