【问题标题】:Why is null+null = 0 in javascript为什么在javascript中为null + null = 0
【发布时间】:2016-09-04 09:02:28
【问题描述】:

当我注意到 null+null 等于 0in javascript 时,我正在做一些有趣的测试。 有什么原因吗?

【问题讨论】:

  • + 运算符的操作数被转换为数字,除非它们不是字符串
  • @hindmost 并不总是,但足够接近
  • @hindmost null+[] 实际上是“null”。我会说它几乎是任意标准化的

标签: javascript null


【解决方案1】:

+ 运算符仅适用于数字和字符串。当出现不是数字或字符串的东西时,它会强制执行。规则是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 被强制转换为 string 而不是数字,给我们"null"+"" 当然是"null"

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-07-04
    • 1970-01-01
    • 1970-01-01
    • 2014-10-21
    • 2022-01-14
    • 1970-01-01
    相关资源
    最近更新 更多