有人能解释一下以下代码的运行结果是如何评估的吗?
{} + {} // NaN
[] + {} // "[object Object]"
{} + [] // 0
[] + [] // ""
有人能解释一下以下代码的运行结果是如何评估的吗?
{} + {} // 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([]+[]) // ''
{}+{}
中的第一个 {}
被解释为一个块,第二个 {}
被解释为空对象,加号 +
被解释为 一元加操作符,因此 {}+{}
等价于:
{
//Empty block, does nothing
}
+{} //Unary + applied to empty object, which is NaN
{}+[]
中,{}
被解释为一个语句块,而 +[]
被解释为应用于空数组的一元加法运算符,得到的结果是 0
。[]+{}
,+
被解释为字符串连接操作符,所以两个操作数都被转换为字符串,这种情况下 []
被转换为空字符串(""
),{}
被转换为 "[object Object]"
,然后两者被连接在一起得到 ""+"[object Object]"
,即 "[object Object]"
。[]+[]
,两个数组都被转换为空字符串,得到的结果是 ""+""
,即 ""
。当使用任何对象和它的字符串表示形式添加数组时,结果总是一个连接。
例如:
[1] + [2] // is merged to "12", so [] + [] is an empty string ""
['test'] + {} // "test[object Object]"
[object Object]
。
{}
,结果是未定义的。undefined
值相加会得到NaN
,因为你无法对它们进行任何加法运算。
注意:返回值取决于JavaScript的实现(即在哪个浏览器或环境中)。{} + {}
你不能在两个对象上进行加法或任何操作
[] + {} // "[object Object]"
这只是一个字符串和对象之间的连接,你可以通过 alert({});
得到相同的结果。
{} + [] // 0
相同
[] + [] // ""
两个空字符串的连接结果是空字符串。
{} + []
实际上是"0"
(一个字符串),而不是0
(一个数字)。 - DaoWen0
。 - Adi