【问题标题】:Why plus operator in brackets works differently?为什么括号中的加号运算符的工作方式不同?
【发布时间】:2015-07-23 18:31:01
【问题描述】:

能否解释一下为什么结果不同?

  1. ({} + {}) // = "[对象对象][对象对象]"
  2. {} + {} // = NaN

我知道在这两种情况下对象都被转换为字符串,但是为什么在第二种情况下结果被转换为数字呢?

【问题讨论】:

  • 不同的不是加号运算符,而是那些曾经是对象文字和其他东西的花括号
  • 什么是“东西”?)
  • 提示:尾随分号很重要
  • @Bergi:那个骗子没有回答为什么({} + {}) 返回的东西不是{} + {} 的。

标签: javascript


【解决方案1】:

发件人:

http://www.2ality.com/2012/01/object-plus-object.html

问题在于 JavaScript 将第一个 {} 解释为空 代码块并忽略它。因此,通过评估计算 NaN +{}(加号后跟第二个 {})。您在这里看到的加号不是二元加法运算符,而是转换的一元前缀运算符 它对数字的操作数,与 Number() 的方式相同

...

为什么第一个 {} 被解释为代码块?因为完整 输入被解析为语句并在 a 的开头使用花括号 语句被解释为开始一个代码块。因此,您可以修复 通过强制将输入解析为表达式:

({} + {})

'[对象对象][对象对象]'

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-01-16
    • 2014-09-04
    • 2020-02-08
    • 1970-01-01
    • 1970-01-01
    • 2019-07-15
    • 2014-08-14
    • 2017-08-08
    相关资源
    最近更新 更多