任何人都可以告诉我为什么这是30岁?
({}+{}).length // = 30?
但这是0?
([] + []).length // = 0?
答案 0 :(得分:11)
这是预期的行为。在2个数组上使用+
运算符时,两个数组都会转换为字符串,这与调用.join(',')
基本相同。如果数组都是空的,则会连接两个空字符串,从而产生一个长度为0
的空字符串。
([] + []) = ""
但是对于对象,它们被转换为字符串的方式是不同的。默认情况下,+
运算符会将对象强制转换为字符串,这将导致字符串"[object Object]"
执行两次,并且您将获得一个30
字符长字符串。
({}+{}) = "[object Object][object Object]"
答案 1 :(得分:1)
Javascript中的+
运算符用于添加数字或字符串,但在Object上使用时,它实质上调用toString
原型。
所以:({}).toString()
是[object Object]
并且,如果你将两个字符串添加到[object Object]
得到:[object Object][object Object]
,因此长度为30。
但字符串的空数组[]
只是""
,因此两个""
的组合仍然只是:""
,因此长度为0
([]).toString() // -> ""