为啥 (+)="[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声明定义一个字符串