2016-10-04 16 views
1

いくつかのJavaScriptを使いこなしていて、意図した通りにうまくいかなくなったと思われるものがありました。 [].join()は、任意の深さのネストされた配列を平坦化しているようです。Array.prototype.join()は深さの配列を平坦化するのはなぜですか?

さらに、var arr = [['a'], [[[[[[[[['b']]]]]]]]], ['c']];も上記と全く同じ結果を返します。

それはオブジェクトとの予想(誤った)行動を返しますので、特に奇数である:これは、最新のクロム(53.0.2785.116)、意図、またはバグの特徴である場合

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

興味を?起こる最初の要素は文字列に強制されることで、接合されています配列内の各要素について

+2

(http://www.ecma-international.org/ecma-262/5.1/# [配列の_The要素が文字列に変換され、これらの文字列は、その後連結され、separator._の出現によって分離]秒-15.4.4.5) – Tushar

答えて

0

['a']のデフォルトのtoStringの結果の結果、'a'になります。したがって、[['a']].toString()の結果は'a'となります。これをコンソールで再生すると、これを明確にする必要があります。 ['a', 'b'].toString()'a,b'になるため、配列に複数の要素がある場合は違いが見られます。

1

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

ような何かがちょうどあなたが参加しないので

"b" 

される文字列に強制変換する場合、構成要素は、参加プロセスが糊付けのその事を行う前に、文字列であることを強制されます一緒に要素。

関連する問題