谁能向我解释一下以下结果是如何评估的?
{} + {} // NaN
[] + {} // "[object Object]"
{} + [] // 0
[] + [] // ""
这是对此的完整解释,检查一下。
注意
{} + {}
如果您直接在控制台中执行它,则为 NaN
,因为 {}
被认为是一个块而不是一个对象。
({}+{})
应该是'[object Object][object Object]'
真正的结果是:
console.log({}+{}) // '[object Object][object Object]'
console.log([]+{}) // '[object Object]'
console.log({}+[]) // '[object Object]'
console.log([]+[]) // ''
将数组与任何对象及其字符串表示形式相加总是会导致连接
例如:
[1] + [2] // is merged to "12", so [] + [] is an empty string ""
第二个例子也一样
['test'] + {} // "test[object Object]"
所以一个空数组加上一个空对象只会返回一个
[object Object]
添加到空对象也很容易:
评估一个简单的空对象:
{} // results in undefined
添加两个
undefined
值就是 NaN
,因为你无法对它们进行加法。
注意:返回值取决于JavaScript的实现(即在哪个浏览器或环境中)
对于
{}+{}
,第一个 {}
被解释为块,第二个 {}
被解释为空对象,+
被解释为 一元加运算符,因此 {}+{}
相当于:
{
//Empty block, does nothing
}
+{} //Unary + applied to empty object, which is NaN
类似地,在
{}+[]
中,{}
被解释为块,而 +[]
被解释为应用于空数组的一元加运算符,从而给出 0
。
对于
[]+{}
,+
被解释为字符串连接运算符,因此两个操作数都转换为字符串,在本例中,[]
被转换为空字符串 (""
),并且 {}
被转换到 "[object Object]"
,然后将两者连接在一起,得到 ""+"[object Object]"
,即 "[object Object]"
。
类似地,对于
[]+[]
,两个数组都会转换为空字符串,得到 ""+""
,即 ""
。
{} + {}
你不能对两个对象进行加法或任何操作
[] + {} // "[object Object]"
这只是字符串和对象之间的连接,与
alert({});
得到相同的结果
{} + [] // 0
同上
[] + [] // ""
两个空字符串的连接 = 空字符串。