2017-02-08 7 views
0

今日、偶然、私はあなたが配列にプロパティを設定できることを発見しました.Javascriptのすべてがオブジェクトなので、意味があります。配列のプロパティをプロパティに準拠させていますか?

共通配列の反復法と組み合わせるとさらに、これは特定の興味深い振る舞いを示す:

let arr = ['a', 'b', 'c']; 
arr.test = 'Test'; 

arr.map(el => console.log(el)); 

//output: 
//a 
//b 
//c 

arr.forEach(el => console.log(el)); 

//output: 
//a 
//b 
//c 

for(let x in arr){ 
    console.log(arr[x]); 
} 

//output: 
//a 
//b 
//c 
//Test 

誰かがここで何が起こっているのか説明できますか? mapforEachはプロパティを無視しますが、forが出力するのはなぜですか?最初にプロパティを配列に設定するのはなぜですか?そして、これは標準に準拠した練習であり、私が生産中にすべきことですか?

+1

配列は、長さプロパティといくつかのメソッドを持つオブジェクトです。 –

+0

可能な複製[javascriptの配列にプロパティを追加するのは良い方法ですか](http://stackoverflow.com/questions/27895365/is-it-good-practice-to-add-properties-on-array-in- javascript) – JJJ

答えて

1

なぜマップとはforEachプロパティを無視するん

彼らは、アレイ上で動作するように設計された配列方法、であり、配列内の唯一の「本当の」データが数値プロパティ名を持っていることを認識しています。

それ

for ... inループがループすべて以上の反復可能な特性となり、いずれかの新しいプロパティがデフォルトで反復可能である出力用。

まず、プロパティを配列に設定できるのはなぜですか?

あなたが言ったように:それらはオブジェクトなので。

そして、これが標準に準拠練習です

標準は、はいそう...配列はオブジェクトであることを述べています。

と私がプロダクションで行うべきことは何ですか?

一般的にはありません。コードを管理する人を混乱させる可能性があります。

1

for/inループは、オブジェクトのプロパティをループすることを意味します。そのため、使用するときにtestプロパティが取得されます。

forループは、配列のインデックスと除外プロパティを取得するためにカウンタが使用されるため、配列を対象としています(配列をトラバースするときにlengthプロパティを反復したくない場合)?

.mapおよび.forEachは、配列の要素のすべてではなく配列の要素を反復するように特別に設計されたプロパティです。

関連する問題