2012-08-13 64 views
14

任何人都可以向我解释如何评估以下结果?对象和阵列增加

{} + {} // NaN 
[] + {} // "[object Object]" 
{} + [] // 0 
[] + [] // "" 
+1

我认为'{} + []'实际上是''0''(一个字符串)而不是'0'(一个数字)。 – DaoWen 2012-08-13 08:38:49

+0

@DaoWen,它实际上是一个Integer'0' – Adi 2012-08-13 08:39:50

+0

no sir,它是一个整数,如果你喜欢,可以在chromes控制台中测试它。 – Hilmi 2012-08-13 08:40:41

回答

13

下面是对此的全面说明,check it

并注意{} + {}NaN如果你因为{}被认为是一个块,而不是一个对象直接在控制台执行。

({}+{})应当'[object Object][object Object]'

真正的结果是

console.log({}+{}) // '[object Object][object Object]' 
console.log([]+{}) // '[object Object]' 
console.log({}+[]) // '[object Object]' 
console.log([]+[]) // '' 
+0

它的一个块没有对象的东西是一个伟大的抓住!谢谢! – Adi 2012-08-13 08:49:43

+0

描述的另一个链接:https://loomcom.com/blog/2015/06/29/the-wats-of-javascript/ – Arda 2018-01-20 18:00:31

2

与任何对象和它的字符串表示总是导致加入

例如添加数组:

[1] + [2] // is merged to "12", so [] + [] is an empty string "" 

同样等于为你的第二个例子

['test'] + {} // "test[object Object]" 

所以空数组加上一个空的对象将只返回一个[object Object]


用于添加到空的对象很容易太:

评估一个简单的空对象:{} // results in undefined

并且添加两个undefined值是NaN,因为您无法对它们进行添加。

注意:返回值取决于执行JavaScript(也就是在浏览器或环境)

另外:What is {} + {} in JavaScript?

0
{} + {} 

你不能添加或任何操作两个对象

[] + {} // "[object Object]" 

它只是一个字符串和一个对象之间的concat,你有相同的结果下用alert({});

{} + [] // 0 

相同

[] + [] // "" 

的concat两个空字符串=空字符串。