BFE.devでのAI解答例 - JavaScript クイズ
11. Implicit Coercion II
以下は出力結果です:
""
"1"
"1"
"11"
"2"
-1
-1
0
-1
"[object Object]"
"[object Object][object Object]"
NaN
説明:
JavaScriptでは、+
演算子は、少なくとも一方が文字列である場合、文字列の結合を行います。では、配列を文字列としてどのようにそれらしいものに変換するか考えてみましょう。空の配列を文字列に変換すると、空の文字列が返されます。したがって、最初の [] + []
は "" + ""
なので、空文字列 ""
が返されます。
[] + 1
の場合、数値1は文字列に変換され、"" + "1"
(空文字列と1を結合)となるため、結果は "1"
となります。
[[]] + 1
と [[1]] + 1
の場合、どちらもはじめに空の文字列があります。[[]]
は二次元配列であるため、空の配列が文字列に変換され、"" + "" + 1
となるため、結果は "1"
です。 [[1]]
の場合、たとえ二次元配列であっても、最初の数値1
は文字列に変換され、文字列"1"
が追加されます。したがって、結果は "11"
になります。
[[[[2]]]] + 1
の場合は、同様に、追加される数値 1
が文字列に変換されて結合されるため、 "21"
となります。
一方、 -
演算子は数値演算を意味し、空の配列を数値に変換しようとすると、 0
になります。 [] - 1
の場合、 []
が 0
に変換され、 -1
と引き算すると -1
が返ります。同様に、二次元以上の空配列ですでに 0
であるため、次の配列の引き算はすべて -1
になります。
[] + {}
の場合、{}
はオブジェクトなので、文字列に変換されると [object Object]
になります。従って、結果は "[object Object]"
になります。さらに、 {}
が -
演算子で数値ゼロに変換されると、 {}
は 0
に変換されるため、 0
から 0
を引いて、結果はは 0
となります。最後に、 {}
と {}
を -
演算子で減算すると、 NaN
が得られます。これは、「None of Numbers」の略で、この場合、このような比較を実行することはできません。