回答
+
運算符僅用於整數和字符串。當你在另一個類型上使用它時,JavaScript會嘗試轉換類型(首先是字符串,然後是int)。
將數組轉換爲字符串時,它們會以逗號分隔的字符串形式輸出。所以,[] + []
=>"" + ""
=>"
。
又如:[1,2] + [3,4]
=>"1,2" + "3,4"
=>"1,23,4"
很好的答案。鏈接到規範的相關部分不會受到傷害。 「first to string」的重要性可以像這樣突出顯示:'[3] + [3] //「33」' – 2012-02-15 20:44:05
@GGG:我試圖在spec中找到它:-P – 2012-02-15 20:45:12
@GGG:Found它http://es5.github.com/#x11.6.1 – 2012-02-15 20:46:31
猜測,但我猜測JavaScript試圖在那裏連接,而不是additon。
由於+
操作串行化兩個陣列並連接兩個結果。
function() { return this.join(','); }
的兩個陣列是空的,因此通過toString
返回的字符串也爲空和兩個空字符串做出一個空字符串,以及:序列化經由Array.prototype.toString
方法,其基本上沒有這個完成。
+運算符會嘗試將數組轉換爲字符串。如果要連接兩個或更多數組,請使用concat命令。
在JavaScript中,有兩種類型的值;元,其中包括null
,undefined
,boolean
,string
和number
,一切是object
包括array
當添加的東西,JavaScript的轉換價值爲數字,字符串或原語。內部JavaScript,使用toPrimitive
方法將變量轉換爲基元。
以下爲toPrimitive
toPrimitive(input, preferedType);
簽名隨着:
[] + []
JS轉換[]
到原始的,首先嚐試valueOf()
它返回數組:
var arr = [];
arr.valueOf() === arr // true
作爲該結果不是原始的,toString()
被調用並返回空字符串(字符串是原始的)。因此,[] + []
的結果是兩個空字符串的串聯。
- 1. Regex.Split在結果數組中添加空字符串
- 2. 爲什麼不能將字符串添加到JavaScript數組中?
- 3. 爲什麼Date添加結果是字符串?
- 4. 爲什麼bool(true)&& string的結果是javascript中的字符串?
- 5. 爲什麼當我使用count結果是空字符串?
- 6. 爲什麼數字+字符串在JavaScript中的字符串?
- 7. 爲什麼設置字符串變量類型添加空格結果?
- 8. 爲什麼在Javascript中添加兩位小數會產生錯誤的結果?
- 9. 爲什麼IE8在JS字符串concat中添加空格?
- 10. PHP:在foreach中創建一個字符串數組,然後添加所有字符串數組的結果
- 11. 爲什麼string.format()的結果是一個字符串,即使是數字?
- 12. 什麼是添加一個在C做一個字符數組?
- 13. 在java中分割爲字符串數組添加空格
- 14. 爲什麼字符串總是空的?
- 15. 什麼是找到兩個字符串數組之間的PostgreSQL
- 16. 在Javascript中添加多個字符串作爲數字
- 17. 爲什麼C++字符串在空終止符中結束?
- 18. 在C++中添加兩個字符串
- 19. 什麼是空字符串?
- 20. 在Javascript中,爲什麼array.map(String)返回字符串數組?
- 21. MID的字符串結果爲空值
- 22. 我的字符串concatination每次加倍結果,爲什麼?
- 23. 什麼是以空字符結尾的字符串?
- 24. PHP數組中的這兩個字符串有什麼區別?
- 25. 簡單的JavaScript空字符串檢查,(空字符串)是什麼意思,爲什麼它失敗?
- 26. 爲什麼s [0]是C++中空字符串s的空字符串?
- 27. 爲什麼「2010年」=〜/([0-4] *)/結果爲$ 1中的空字符串?
- 28. 在數組的(字符串)元素中添加空格
- 29. Javascript:爲什麼一個數字被視爲一個字符串?
- 30. 爲什麼fgets在字符串的末尾添加一個空格?
最近的一次會議討論了一個屏幕錄像,它探討了Ruby和Javascript的奇怪行爲,但據我瞭解,Javascript特性是特定於實現的。 – 2012-02-15 20:39:15
我曾經寫過這部分較大的答案[這裏](http://stackoverflow.com/questions/7202157/can-you-explain-why-10/7202287#7202287)。 – pimvdb 2012-02-15 20:40:49
@BrianDriscoll這實際上是我問這個問題的原因。 – 2012-02-15 20:41:53