配列はJavaScriptのオブジェクトですが、配列をトラバースするためにin loopを使用することはお勧めしません。実際、配列にfor in loopを使用しないようにする多くの理由があります。
for inループはプロトタイプチェーン上のすべてのプロパティを列挙し、それを防ぐ唯一の方法は、hasownpropertyを使用して判断することです。
トラバーサル
配列を通過するための最適なパフォーマンスのために、最良の方法はクラシックをループに使用することです。
コードコピーは次のとおりです。
var list = [1、2、3、4、5、...... 100000000];
for(var i = 0、l = list.length; i <l; i ++){
console.log(list [i]);
}
ここには、l = list.lengthで配列の長さをキャッシュすることです。
プロパティの長さは配列自体で定義されていますが、ループの各トラバーサルにはまだ頭上があります。最新のJavaScriptエンジンはこの状況のパフォーマンスの最適化を実行した可能性がありますが、JavaScriptコードが常にこのブラウザで実行されることを保証することはできません。
実際、キャッシュの長さのないループは、キャッシュの長さのループよりもはるかに遅いです。
長さ属性
長さの属性は、Getterメソッドを介して配列内の要素の数のみを返しますが、配列はセッターメソッドによって切り捨てられます。
コードコピーは次のとおりです。
var foo = [1、2、3、4、5、6];
foo.length = 3;
foo; // [1、2、3]
foo.length = 6;
foo.push(4);
foo; // [1、2、3、未定義、未定義、未定義、4]
長さの属性に少ない数値を割り当てると、配列が切り捨てられ、より多くの数値が割り当てられた場合、配列は切り捨てられません。
要約します
最適なパフォーマンスのために、長さの属性をキャッシュしながら、for for in loopの代わりにforループを使用することをお勧めします。
また、メソッドがなく、一意の属性の長さのみを持たない配列オブジェクトもあります。文字列オブジェクトには長さの方法があります~~