为什么({} + {})=“[对象对象] [对象对象]”?

时间:2016-03-03 11:42:05

标签: javascript html node.js

我测试了代码:

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

为什么添加()会更改结果?

2 个答案:

答案 0 :(得分:8)

{}+{}是一个,后跟一个表达式。第一个{}是块(就像您附加到if语句的那种),+{}是表达式。第一个{}是一个块,因为当解析器查找语句并看到{时,它会将其解释为块的开头。那块空了,什么也没做。处理完块后,解析器会看到+并将其读作一元+。这将解析器转移到处理表达式。在表达式中,{启动对象初始值设定项而不是块,因此{}是对象初始值设定项。对象初始值设定项创建一个对象,+然后尝试强制转换为数字,获取NaN

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

答案 1 :(得分:1)

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