0

重複の可能性:
JavaScriptの「For…in」と配列

for-in反復を使用してさまざまな配列をループし、さまざまな結果が得られました。

var my_array1 = {"foo":2, "bar":3};
var my_array2 = new Array(
'foo',
'bar'
);
var my_array3 = ["foo","bar"];


for (var key in my_array1){
alert(key); // outputs key
}

for (var key in my_array2){
alert(key); // outputs index integer not value
}

for (var key in my_array3){
alert(key); // outputs index integer not value
}

非連想配列でのfor-in反復が、Pythonのように実際の値ではなく、インデックスを提供するだけの理由はありますか?

非連想配列の場合、for(var index = 0; index <my_array.length; index ++)を使用するよりもfor(var index in my_array)を使用する方が有利ですか?

4

3 に答える 3

1

for..inは、値ではなくプロパティを繰り返し処理します。

上記のリンクで説明されているように、配列で通常の forの代わりにそれを使用することの理論的な欠点は、プロパティの反復順序がECMAScript 仕様(このセクションの下のテキストを参照) で定義されておらず、この実装に依存することです。

于 2012-07-19T19:09:03.357 に答える
0

単に:

最初の配列は配列ではありません。オブジェクトリテラルです。

すべてのプロパティとメソッドが公開されているクラスのインスタンスと考えてください。他の言語がシングルトンを作成しようとして作成するグローバルスコープの問題がないことを除いて、本当に、本当に望むなら、それをシングルトンと考えることができます。

したがって、javascript ではfor (key in obj) {}、クラス インスタンスのプロパティを反復処理することを意図しています。for (i = 0, length = x; i < length; i += 1) {}配列を反復処理するために使用します。

于 2012-07-19T19:09:02.997 に答える
0

その理由は、基本的には、Javascript の「in」演算子を設計した人のやり方に帰着すると思います。この動作は、オブジェクト/ハッシュの場合、キーが 'foo' と 'bar' であるのに対し、配列のキーはインデックスであるという点で、他のいくつかの言語と似ています。'標準' for ループと配列の 'for in' ループの使用に大きな違いは見られませんが、明確にするために、.私のためにそれを処理する each() 関数。

于 2012-07-19T19:09:38.477 に答える