为什么({} + {})=“[object Object] [object Object]”?
这个问题在这里已经有了答案:
{}+{}是一个后跟一个表达式的块。 第一个{}是块(就像你附加到if语句的那种), +{}是表达式。 第一个{}是块,因为当解析器查找语句并看到{ ,它将其解释为块的打开。 那块空的,什么都不做。 处理完该块后,解析器将看到+并将其读为一元+ 。 这将解析器转换为处理表达式。 在一个表达式中, {开始一个对象初始值设定项而不是一个块,所以{}是一个对象初始值设定项。 对象初始化创建一个对象,它+然后试图强制到一个数,得到NaN 。
在({}+{}) ,开放(将解析器转换为期望表达式的模式,而不是语句。因此, ()包含两个带有二进制+对象初始化器(例如,“加法”运算符,它们之间可以是算术或字符串连接)二进制+操作符会根据它的操作数尝试添加或连接,它将操作数强制为基元,在{}的情况下,它们都成为字符串"[object Object]"所以你最终得到的是"[object Object][object Object]" ,它们是连接它们的结果。
由于含糊不清。 {}是一个对象,但也是一个块边界。 没有()它被解释为后者。
