我已经测试了代码:
{}+{} = NaN;
({}+{}) = "[object Object][object Object]";为什么添加()会改变结果?
发布于 2016-03-03 11:51:30
{}+{}是一个块,后面跟着一个表达式。第一个{}是块(就像附加到if语句的那种),+{}是表达式。第一个{}是块,因为当解析器查找语句并看到{时,它将其解释为块的打开。那个街区是空的,什么也做不了。处理了该块后,解析器将看到+并将其读取为一元+。它将解析器转换为处理表达式。在表达式中,{启动对象初始化器而不是块,因此{}是对象初始化程序。对象初始化程序创建一个对象,然后+尝试将其强制到一个数字,获取NaN。
在({}+{})中,打开的(将解析器转换为期望表达式而不是语句的模式。因此,()包含两个带有二进制+ (例如,加法运算符,可以是算术或字符串连接)的对象初始化器。二进制+运算符将根据其操作数尝试添加或连接。它将其操作数强制到原语,在{}的情况下,它们都成为字符串"[object Object]"。因此,您最终得到了"[object Object][object Object]",这是连接它们的结果。
发布于 2016-03-03 11:45:56
因为模棱两可。{}是一个对象,但也是一个块边界。如果没有(),它将被解释为后者。
https://stackoverflow.com/questions/35771239
复制相似问题