为啥 (+)="[object Object][object Object]"? [复制]

Posted

技术标签:

【中文标题】为啥 (+)="[object Object][object Object]"? [复制]【英文标题】:why (+)="[object Object][object Object]"? [duplicate]为什么 (+)="[object Object][object Object]"? [复制] 【发布时间】:2016-06-16 17:22:07 【问题描述】:

我已经测试了代码:

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

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

【问题讨论】:

因为是一个对象..不是一个数字.. 【参考方案1】:

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

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

【讨论】:

【参考方案2】:

因为模棱两可。 是一个对象,也是一个块边界。如果没有(),则解释为后者。

【讨论】:

以上是关于为啥 (+)="[object Object][object Object]"? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

java,根据一个动态的map如何动态 往 Object[] array=new Object[];添加值

数组声明和使用要点

为啥带有对象的 typeof 数组返回“object”而不是“array”? [复制]

Java中Object[] options="二进制","四进制","八进制";中为啥可以用Object声明定义一个字符串

从 NSDate 中提取日期和时间 - Objective C

什么是Objective-C中Android的“Spannable”等价物