为什么({} + {})=“[object Object] [object Object]”?

这个问题在这里已经有了答案:

  • 对于CodeMash 2012的“Wat”演讲中提到的这些奇怪的JavaScript行为,有什么解释? 5个答案
  • 为什么++ [[]] [+ []] + [+ []]返回字符串“10”? 8个答案

  • {}+{}是一个后跟一个表达式的块。 第一个{}是块(就像你附加到if语句的那种), +{}是表达式。 第一个{}是块,因为当解析器查找语句并看到{ ,它将其解释为块的打开。 那块空的,什么都不做。 处理完该块后,解析器将看到+并将其读为一元+ 。 这将解析器转换为处理表达式。 在一个表达式中, {开始一个对象初始值设定项而不是一个块,所以{}是一个对象初始值设定项。 对象初始化创建一个对象,它+然后试图强制到一个数,得到NaN

    ({}+{}) ,开放(将解析器转换为期望表达式的模式,而不是语句。因此, ()包含两个带有二进制+对象初始化器(例如,“加法”运算符,它们之间可以是算术或字符串连接)二进制+操作符会根据它的操作数尝试添加或连接,它将操作数强制为基元,在{}的情况下,它们都成为字符串"[object Object]"所以你最终得到的是"[object Object][object Object]" ,它们是连接它们的结果。


    由于含糊不清。 {}是一个对象,但也是一个块边界。 没有()它被解释为后者。

    链接地址: http://www.djcxy.com/p/48047.html

    上一篇: why ({}+{})="[object Object][object Object]"?

    下一篇: Explain why '+[] == 0' output 'true' in Javascript?