当发现null+null等于javascript中的0时,我正在做一些有趣的测试。
有什么理由吗?

最佳答案

+运算符仅适用于数字和字符串。如果显示的不是数字或字符串,则它会强制转换。规则是covered by the spec,但是简短的版本是操作数是coerced to primitives(在这种情况下,它什么都没有改变,null是原始的),然后如果其中一个是字符串,则另一个被强制转换为字符串并完成连接;如果都不是字符串,则将两者都强制转换为数字并完成加法。

因此null得到的coerced to a number为0,因此您得到的0+0当然是0

如果有人对David Haim的 null+[] is "null" observation感到好奇,那是因为我提到了对原始的强制转换:空数组[]被强制转换为原始。当您将数组强制转换为基元时,它最终会调用toString(),后者会调用join()[].join()"",因为没有元素。所以是null+""。因此,null被强制转换为字符串而不是数字,从而给我们"null"+"",当然是"null"

关于javascript - 为什么在JavaScript中null + null = 0,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/39315250/

10-16 05:59
查看更多