谁能向我解释如何评估以下结果?
{} + {} // 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([]+[]) // ''
添加具有任何对象及其字符串表示的数组总是会导致连接
例如:
[1] + [2] // is merged to "12", so [] + [] is an empty string ""
与第二个示例相同
['test'] + {} // "test[object Object]"
所以一个空数组加上一个空对象只会返回一个 [object Object]
添加到空对象也很容易:
评估一个简单的空对象: {} // results in undefined
添加两个undefined
值是NaN
因为您无法对它们进行添加。
注意:返回值取决于 JavaScript 的实现(即在哪个浏览器或环境中)
对于{}+{}
,第一个{}
被解释为一个块,第二个{}
被解释为一个空对象,而 the+
被解释为一个一元加运算符,所以{}+{}
等价于:
{
//Empty block, does nothing
}
+{} //Unary + applied to empty object, which is NaN
类似地,在 中{}+[]
,{}
被解释为一个块,+[]
并被解释为应用于空数组的一元加运算符,它给出0
。
对于[]+{}
, the+
被解释为字符串连接运算符,因此两个操作数都转换为字符串,在这种情况下,[]
将转换为空字符串 ( ""
) 并{}
转换为"[object Object]"
,然后将两者连接在一起给出""+"[object Object]"
哪个是"[object Object]"
。
类似地,对于[]+[]
,两个数组都被转换为空字符串,给出""+""
哪个是""
。
{} + {}
你不能对两个对象进行加法或任何操作
[] + {} // "[object Object]"
它只是一个字符串和一个对象之间的连接,你有相同的结果 alert({});
{} + [] // 0
相同的
[] + [] // ""
两个空字符串的连接 = 空字符串。