2012-11-15 91 views
1

我TESTIN一些JavaScript概念,我試圖理解爲什麼:的JavaScript數組和對象除了

typeof({} + {}) 
typeof([] + []) 

回報「字符串」尚未:

typeof {} 
typeof [] 

返回一個「對象」

我已經在NodeJS,FireFox,Chrome和IE9中嘗試了這一切,結果相同。

+3

您的觀察結果都與'+'運算符的語義有關,這很容易通過[閱讀語言規範]進行確認(http://bclary.com/2004/11/07/#a-11.6 .1) – Pointy

+1

我猜測,因爲添加對象和數組對編譯器/解釋器沒有任何意義,因爲在對它們進行連接之前,它們正在對這些對象執行toString()。這是正確的嗎? – Guy

+0

是的 - 查看我剛剛編輯進我的評論的鏈接。 – Pointy

回答

4

+運算符被定義爲連接字符串或添加數字。如果您嘗試其他操作,則必須先將操作數轉換爲字符串或數字。它看起來像字符串在這裏是首選。

您可以控制stringnumber分別由在對象上定義函數.toString.valueOf

1

您不能使用+運算符連接或「添加」數組或對象。

如果您添加兩個對象,它們的字符串表示形式將被連接起來。

0

+運營商試圖強制操作數爲通用類型返回。在這種情況下,類型是字符串,因爲添加對象或數組沒有任何意義。

+操作者文檔:

如果Type(lprim)是字符串或類型(rprim)的字符串,然後 返回字符串即串聯接着的ToString的ToString(lprim)的結果( rprim)

由於對象的默認值是一個字符串(空字符串,如果是空對象),操作的返回值爲'' + '' => ''

如果您關心內部,請參閱ECMAScript文檔中的+ operator,ToPrimitive和對象的DefaultValue