2016-10-04 39 views
1

亂搞了一些JavaScript,我認爲應該產生一個錯誤,按預期工作。 [].join()似乎變平任何深度的嵌套數組。爲什麼Array.prototype.join()壓扁任何深度的數組?

var arr = [['a'], ['b'], ['c']]; 
arr.join('-'); // => 'a-b-c' 

甚至var arr = [['a'], [[[[[[[[['b']]]]]]]]], ['c']];返回與上述完全相同的結果。

這是特別奇怪,因爲它返回一個對象的預期(錯誤)的行爲:

var arr = [{}, {}, {}]; 
arr.join('-'); // => '[object Object]-[object Object]-[object Object]' 

好奇,如果這是最新的鉻(53.0.2785.116)的特徵,意,或一個錯誤?

+2

[_將數組的元素轉換爲字符串,然後將這些字符串連接起來,並通過分隔符的出現來分隔._](http://www.ecma-international.org/ecma-262/5.1/#仲15.4.4.5) – Tushar

回答

0

這是['a']上的默認toString行爲導致'a'的結果。因此,[['a']].toString()結果在'a'。在控制檯中播放這些內容應該清楚這一點。如果陣列有多個元素,則會看到差異,因爲['a', 'b'].toString()將導致'a,b'

1

對於要連接的數組中的每個元素,發生的第一件事是該元素被強制爲一個字符串。喜歡的東西

[[[[["b"]]]]] 

時強制轉換爲字符串將只是

"b" 

所以,當你的加盟,組成元素將被強制爲字符串加入過程確實膠合它的東西之前元素在一起。