当我在javascript中注意到null+null
等于0
时,我正在做一些有趣的测试。
有什么理由吗?
答案 0 :(得分:16)
+
运算符仅适用于数字和字符串。当呈现不是数字或字符串的东西时,它会强制执行。规则是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"
。