我正在测试一些JavaScript概念,我试图理解为什么:
typeof({} + {})
typeof([] + [])
返回'字符串':
typeof {}
typeof []
返回'对象'
我在NodeJS,FireFox,Chrome和IE9中尝试了这一切,结果相同。
答案 0 :(得分:4)
+
运算符定义为连接字符串或添加数字。如果您尝试其他操作,则必须首先将操作数转换为字符串或数字。看起来字符串在这里是首选。
您可以通过分别在对象上定义函数string
和number
来控制返回.toString
或.valueOf
的内容
答案 1 :(得分:1)
您无法使用+运算符连接或“添加”数组或对象。
如果添加两个对象,则会将它们的字符串表示连接起来。
答案 2 :(得分:0)
+
运算符尝试将操作数强制转换为公共类型。在这种情况下,类型是字符串,因为添加对象或数组没有任何意义。
来自+
运营商文档:
如果Type(lprim)是String或Type(rprim)是String,那么 返回串联ToString(lprim)后跟ToString(rprim)的结果的字符串
由于对象的默认值是字符串(空字符串,如果是空对象),操作的返回值为'' + '' => ''
。
如果您关心内部,请参阅ECMAScript文档,了解+
operator,ToPrimitive
和对象的DefaultValue
。