先に小さなテストを行いましょう。バイドやコードのテストは行わないでください。
以下の出力は何ですか。
1 + 1
'1' + 1
1 + true
NaN + 1
NaN + '1'
null + 1
null + '1'
[1] + 1
[1,2] + [1]
[1] + {n : 1}
もし上記の演算について少し曖昧な点がある場合、おそらく加算の暗黙の型変換が理解できていないと思われます。
加算のルールは何でしょうか。
一つの図で明確に理解できます。
では、例を見てみましょう。
上記の図を見て整理しましょう。
両方がプリミティブ型であり、文字列ではないため、両方を数値型に変換する必要があります。
0 + NaN と同じですので、最終結果は NaN です。
また、[1] + 1 の例を見てみましょう。
オブジェクト型が含まれているため、valueOf を呼び出す必要があります。
呼び出した後、プリミティブ型ではないため、toString を呼び出す必要があります。
プリミティブ型に変換され、上記の手順に従って、すべての文字列を文字列として結合するため、結果は '11' です。
もう一つ例を見てみましょう。
ここでエラーが発生し、このオブジェクトをプリミティブ型に変換できないというメッセージが表示されます。これは、valueOf と toString が obj をプリミティブ型に変換できないためです。
これらの内容は、面接の質問に頻繁に出題され、知識の理解度を試されます。皆さん、頑張ってください。