why({} + {})=“[object Object] [object Object]”?
问题描述:
我已经测试代码:why({} + {})=“[object Object] [object Object]”?
{}+{} = NaN;
({}+{}) = "[object Object][object Object]";
为什么加入()
变化的结果呢?
答
{}+{}
是块后跟一个表达式。第一个{}
是块(类似于您附加到if
声明的类型),+{}
是表达式。第一个{}
是一个块,因为当解析器正在查找语句并看到{
时,它将其解释为块的打开。那块空的,什么都不做。处理完该块后,解析器将看到+
并将其读取为一元文件+
。这将解析器转换为处理表达式。在表达式中,{
启动对象初始值设定项而不是块,因此{}
是对象初始值设定项。对象初始值设定项创建一个对象,然后+
然后试图强制一个数字,得到NaN
。
在({}+{})
中,开头(
将解析器转换为期望表达式而不是语句的模式。因此,()
包含两个对象初始值设定项与二进制值+
(例如,“加法”运算符,它们可以是算术或字符串连接)。二进制+
运算符将尝试添加或连接,具体取决于其操作数。它将它的操作数强制为原语,并且在{}
的情况下,它们都成为字符串"[object Object]"
。所以你最终得到"[object Object][object Object]"
,这是连接它们的结果。
答
由于含糊不清。 {}
是一个对象,但也是一个块边界。没有()
它被解释为后者。
因为'{}'是一个对象..不是数字.. – Pogrindis