为什么加括号中的运算符的工作方式不同?

时间:2015-07-23 10:05:38

标签: javascript

您能否解释为何结果不同?

  1. ({} + {}) // =" [object Object] [object Object]"
  2. {} + {} // = NaN
  3. 据我所知,在这两种情况下,对象都会转换为字符串,但为什么在第二种情况下,结果会转换为数字?

1 个答案:

答案 0 :(得分:2)

自:

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

  

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

的方式相同      

...

     

为什么第一个{}被解释为代码块?因为完整   输入被解析为一个语句和一个花括号的开头   语句被解释为启动代码块。因此,你可以解决   通过强制将输入解析为表达式:

     

({} + {})

     

' [object Object] [object Object]'