对象和数组添加

问题描述 投票:0回答:4

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

{} + {} // NaN
[] + {} // "[object Object]"
{} + [] // 0
[] + [] // ""
javascript
4个回答
20
投票

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

注意

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

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

真正的结果是:

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

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 中的 {} + {} 是什么?


3
投票

对于

{}+{}
,第一个
{}
被解释为块,第二个
{}
被解释为空对象,
+
被解释为 一元加运算符,因此
{}+{}
相当于:

{
    //Empty block, does nothing
}

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

类似地,在

{}+[]
中,
{}
被解释为块,而
+[]
被解释为应用于空数组的一元加运算符,从而给出
0

对于

[]+{}
+
被解释为字符串连接运算符,因此两个操作数都转换为字符串,在本例中,
[]
被转换为空字符串 (
""
),并且
{}
被转换到
"[object Object]"
,然后将两者连接在一起,得到
""+"[object Object]"
,即
"[object Object]"

类似地,对于

[]+[]
,两个数组都会转换为空字符串,得到
""+""
,即
""


0
投票
{} + {} 

你不能对两个对象进行加法或任何操作

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

这只是字符串和对象之间的连接,与

alert({});

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

同上

[] + [] // ""

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

© www.soinside.com 2019 - 2024. All rights reserved.