2

重複の可能性:
配列を使用した JavaScript の「For …in」

for-in 構文を使用して、数値の配列をループしようとしています。問題は、これらの数値が文字列に変換されていることです。

for(var element in [0]) {
    document.write(typeof(element)); // outputs "string"
}

これは標準的な動作ですか?これを回避する方法はたくさん考えられますが、JavaScript の理解を深めるために説明を探しているだけです。

4

3 に答える 3

5

JavaScriptが何をするのか誤解していると思いますfor...in。配列要素を反復処理しません。オブジェクトのプロパティを繰り返し処理します。JavaScriptのオブジェクトは、他の言語の辞書やハッシュのようなものですが、文字列によってキー設定されています。0特に配列は、からまでの整数であるプロパティを持つオブジェクトとして実装されます。N-1ただし、すべてのプロパティ名は文字列であるため、インデックスも同様です。

[0]ここで、インデックスは値と一致するため、とは少し異なる例を見てみましょう。[2]代わりに話し合いましょう。

したがって、[2]から継承したものを無視するとArray、とほぼ同じになり{ "0": 2 }ます。

for..inプロパティ名を繰り返し処理します。プロパティ名は、"0"ではなく、を取得します2

では、どのようにsを繰り返すArrayか、あなたは尋ねますか?通常の方法は次のとおりです。

var arrayLen = array.length;
for (var i = 0; i < arrayLen; i++) {
  var el = array[i];
  // ...
}
于 2011-05-23T19:20:01.160 に答える
1

これは、配列の反復で「for ... in」を使用するのはなぜ悪い考えなのか、の繰り返しです。

于 2011-05-23T19:20:41.620 に答える
0

このfor-inステートメントは、オブジェクトのプロパティを列挙します。あなたの場合elementはプロパティの名前であり、それは常に文字列です。

于 2011-05-23T19:19:53.160 に答える