我TESTIN一些JavaScript概念,我試圖理解爲什麼:的JavaScript數組和對象除了
typeof({} + {})
typeof([] + [])
回報「字符串」尚未:
typeof {}
typeof []
返回一個「對象」
我已經在NodeJS,FireFox,Chrome和IE9中嘗試了這一切,結果相同。
我TESTIN一些JavaScript概念,我試圖理解爲什麼:的JavaScript數組和對象除了
typeof({} + {})
typeof([] + [])
回報「字符串」尚未:
typeof {}
typeof []
返回一個「對象」
我已經在NodeJS,FireFox,Chrome和IE9中嘗試了這一切,結果相同。
+
運算符被定義爲連接字符串或添加數字。如果您嘗試其他操作,則必須先將操作數轉換爲字符串或數字。它看起來像字符串在這裏是首選。
您可以控制string
或number
分別由在對象上定義函數.toString
和.valueOf
您不能使用+運算符連接或「添加」數組或對象。
如果您添加兩個對象,它們的字符串表示形式將被連接起來。
的+
運營商試圖強制操作數爲通用類型返回。在這種情況下,類型是字符串,因爲添加對象或數組沒有任何意義。
從+
操作者文檔:
如果Type(lprim)是字符串或類型(rprim)的字符串,然後 返回字符串即串聯接着的ToString的ToString(lprim)的結果( rprim)
由於對象的默認值是一個字符串(空字符串,如果是空對象),操作的返回值爲'' + '' => ''
。
如果您關心內部,請參閱ECMAScript文檔中的+
operator,ToPrimitive
和對象的DefaultValue
。
您的觀察結果都與'+'運算符的語義有關,這很容易通過[閱讀語言規範]進行確認(http://bclary.com/2004/11/07/#a-11.6 .1) – Pointy
我猜測,因爲添加對象和數組對編譯器/解釋器沒有任何意義,因爲在對它們進行連接之前,它們正在對這些對象執行toString()。這是正確的嗎? – Guy
是的 - 查看我剛剛編輯進我的評論的鏈接。 – Pointy