首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么({}+{})=“[对象对象][对象对象]”?

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

Stack Overflow用户
提问于 2016-03-03 11:42:05
回答 2查看 579关注 0票数 3

我已经测试了代码:

代码语言:javascript
复制
{}+{} = NaN;
({}+{}) = "[object Object][object Object]";

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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-03-03 11:51:30

{}+{}是一个块,后面跟着一个表达式。第一个{}是块(就像附加到if语句的那种),+{}是表达式。第一个{}是块,因为当解析器查找语句并看到{时,它将其解释为块的打开。那个街区是空的,什么也做不了。处理了该块后,解析器将看到+并将其读取为一元+。它将解析器转换为处理表达式。在表达式中,{启动对象初始化器而不是块,因此{}是对象初始化程序。对象初始化程序创建一个对象,然后+尝试将其强制到一个数字,获取NaN

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

票数 8
EN

Stack Overflow用户

发布于 2016-03-03 11:45:56

因为模棱两可。{}是一个对象,但也是一个块边界。如果没有(),它将被解释为后者。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35771239

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档