why ({}+{})=“[object Object][object Object]”?
我已经测试了代码:
1 2
| {}+{} = NaN;
({}+{}) ="[object Object][object Object]"; |
为什么添加()会改变结果?
{}+{}是一个块,后跟一个表达式。第一个{}是块(就像您附加到if语句的类型),+{}是表达式。第一个{}是一个块,因为当解析器查找语句并看到{时,它将其解释为一个块的打开。那块空的,什么也不做。在处理完该块之后,解析器将看到+,并将其作为一元+读取。这会将解析器转换为处理表达式。在表达式中,{启动对象初始值设定项而不是块,因此{}是对象初始值设定项。对象初始值设定项创建一个对象,然后+试图强制转换为一个数字,得到NaN。
在({}+{})中,打开的(将解析器转换为期望表达式而不是语句的模式。因此,()包含两个对象初始值设定项,它们之间有一个二进制+(例如,"加法"运算符,可以是算术或字符串连接)。二元+运算符将根据其操作数尝试添加或连接。它将其操作数强制为原语,在{}的情况下,它们都成为字符串"[object Object]"。所以你最终得到了"[object Object][object Object]",连接它们的结果。
因为模棱两可。{}是一个对象,也是一个块边界。如果没有(),则解释为后者。