2016-09-04 5 views
7

私が気づいたら楽しいテストをしていたnull+null0と同じです。 何か理由がありますか?JavaScriptでヌル+ヌル= 0である理由

+2

文字列でない限り、 '+ '演算子のオペランドは数値にキャストされます。 – hindmost

+1

@hindmostは必ずしもそうではありませんが、十分に近いです。 –

+0

@hindmost null + []は実際には" null "です。私はそれがかなり自由に多くの標準化されていると言うだろう –

答えて

14

+オペレータは、数字と文字列でのみ機能します。数字や文字列ではないものが提示されると、それは強くなる。規則はcovered by the specですが、短いバージョンはオペランドがcoerced to primitives(この特定のケースでは何も変化しません、nullはプリミティブです)であり、どちらかが文字列であれば、もう一方は文字列に変換され、連結が行われます。いずれも文字列でない場合は、両方が強制的に数値になり、加算が行われます。

したがってnullは0であるため、となります。もちろん0となります。


誰がために私が述べたよう強制ツープリミティブ事の起こりデビッド・ハイムのnull+[] is "null" observation、好奇心だ場合:空の配列[]がプリミティブに強制変換されます。配列をプリミティブに強制すると、toString()が呼び出され、join()が呼び出されます。 [].join()は要素がないため""です。だからそれはnull+""だ。だからnull文字列の代わりにになり、"null"+""となります。もちろん"null"となります。

関連する問題