您能否解释为何结果不同?
({} + {})
// =" [object Object] [object Object]" {} + {}
// = NaN 据我所知,在这两种情况下,对象都会转换为字符串,但为什么在第二种情况下,结果会转换为数字?
答案 0 :(得分:2)
自:
http://www.2ality.com/2012/01/object-plus-object.html
问题是JavaScript将第一个{}解释为空 代码块并忽略它。因此,通过评估来计算NaN + {}(加上后跟第二个{})。你在这里看到的加号不是二元加法运算符,而是一个转换的一元前缀运算符 它的操作数为数字,与Number()
的方式相同...
为什么第一个{}被解释为代码块?因为完整 输入被解析为一个语句和一个花括号的开头 语句被解释为启动代码块。因此,你可以解决 通过强制将输入解析为表达式:
({} + {})
' [object Object] [object Object]'