对象和数组的添加

时间:2012-08-13 08:29:39

标签: javascript

有人可以向我解释如何评估以下结果吗?

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

4 个答案:

答案 0 :(得分:16)

以下是check it的完整解释。

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

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

真正的结果是

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

答案 1 :(得分: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?

答案 2 :(得分:1)

对于{}+{},第一个{}被解释为一个块,第二个{}被解释为一个空对象,而+被解释为一个{{3 }},因此{}+{}等效于:

{
    //Empty block, does nothing
}

+{}    //Unary + applied to empty object, which is NaN

类似地,在{}+[]中,{}被解释为一个块,而+[]被解释为应用于空数组的一元加运算符,从而得到0

对于[]+{}+被解释为字符串连接运算符,因此两个操作数都转换为字符串,在这种情况下,[]被转换为空字符串({{ 1}}和""转换为{},然后将两者串联在一起,得到"[object Object]",即""+"[object Object]"

类似地,对于"[object Object]",两个数组都将转换为空字符串,得到[]+[],即""+""

答案 3 :(得分:0)

{} + {} 

您不能对两个对象进行添加或任何操作

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

它只是字符串和对象之间的连接,与alert({});

的结果相同
{} + [] // 0

相同

[] + [] // ""

连接两个空字符串=空字符串。