2012-08-13 72 views
14

任何人都可以向我解釋如何評估以下結果?對象和陣列增加

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

我認爲'{} + []'實際上是''0''(一個字符串)而不是'0'(一個數字)。 – DaoWen 2012-08-13 08:38:49

+0

@DaoWen,它實際上是一個Integer'0' – Adi 2012-08-13 08:39:50

+0

no sir,它是一個整數,如果你喜歡,可以在chromes控制檯中測試它。 – Hilmi 2012-08-13 08:40:41

回答

13

下面是對此的全面說明,check it

並注意{} + {}NaN如果你因爲{}被認爲是一個塊,而不是一個對象直接在控制檯執行。

({}+{})應當'[object Object][object Object]'

真正的結果是

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

它的一個塊沒有對象的東西是一個偉大的抓住!謝謝! – Adi 2012-08-13 08:49:43

+0

描述的另一個鏈接:https://loomcom.com/blog/2015/06/29/the-wats-of-javascript/ – Arda 2018-01-20 18:00:31

2

與任何對象和它的字符串表示總是導致加入

例如添加數組:

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

同樣等於爲你的第二個例子

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

所以空數組加上一個空的對象將只返回一個[object Object]


用於添加到空的對象很容易太:

評估一個簡單的空對象:{} // results in undefined

並且添加兩個undefined值是NaN,因爲您無法對它們進行添加。

注意:返回值取決於執行JavaScript(也就是在瀏覽器或環境)

另外:What is {} + {} in JavaScript?

0
{} + {} 

你不能添加或任何操作兩個對象

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

它只是一個字符串和一個對象之間的concat,你有相同的結果下用alert({});

{} + [] // 0 

相同

[] + [] // "" 

的concat兩個空字符串=空字符串。