23

谁能向我解释如何评估以下结果?

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

4 回答 4

20

这是对此的完整解释,请检查

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

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

真正的结果是

console.log({}+{}) // '[object Object][object Object]'
console.log([]+{}) // '[object Object]'
console.log({}+[]) // '[object Object]'
console.log([]+[]) // ''
于 2012-08-13T08:40:12.630 回答
3

添加带有任何对象及其字符串表示的数组总是会导致连接

例如:

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

你的第二个例子也一样

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

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


添加到空对象也很容易:

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

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

注意:返回值取决于 JavaScript 的实现(即在哪个浏览器或环境中)

另外:JavaScript 中的 {} + {} 是什么?

于 2012-08-13T08:40:52.477 回答
3

对于{}+{},第一个{}被解释为一个块,第二个{}被解释为一个空对象,而 the+被解释为一元加运算符,所以{}+{}等价于:

{
    //Empty block, does nothing
}

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

类似地,在 中{}+[]{}被解释为一个块,+[]并被解释为应用于一个空数组的一元加运算符,它给出0.

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

同样,对于[]+[],两个数组都被转换为空字符串,""+""即为""

于 2019-06-25T18:38:56.330 回答
0
{} + {} 

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

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

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

{} + [] // 0

相同的

[] + [] // ""

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

于 2012-08-13T08:44:41.397 回答