为什么({} + {})。长度等于30?

时间:2016-05-11 01:03:36

标签: javascript

{}到String?

任何人都可以告诉我为什么这是30岁?

({}+{}).length //  = 30?

但这是0?

([] + []).length //  = 0?

2 个答案:

答案 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() // -> ""