why({} + {})=“[object Object] [object Object]”?

问题描述:

我已经测试代码:why({} + {})=“[object Object] [object Object]”?

{}+{} = NaN; 
({}+{}) = "[object Object][object Object]"; 

为什么加入()变化的结果呢?

+1

因为'{}'是一个对象..不是数字.. – Pogrindis

{}+{}后跟一个表达式。第一个{}是块(类似于您附加到if声明的类型),+{}是表达式。第一个{}是一个块,因为当解析器正在查找语句并看到{时,它将其解释为块的打开。那块空的,什么都不做。处理完该块后,解析器将看到+并将其读取为一元文件+。这将解析器转换为处理表达式。在表达式中,{启动对象初始值设定项而不是块,因此{}是对象初始值设定项。对象初始值设定项创建一个对象,然后+然后试图强制一个数字,得到NaN

({}+{})中,开头(将解析器转换为期望表达式而不是语句的模式。因此,()包含两个对象初始值设定项与二进制值+(例如,“加法”运算符,它们可以是算术或字符串连接)。二进制+运算符将尝试添加或连接,具体取决于其操作数。它将它的操作数强制为原语,并且在{}的情况下,它们都成为字符串"[object Object]"。所以你最终得到"[object Object][object Object]",这是连接它们的结果。

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