3

for...in ステートメントを JavaScript で使用する方法は誰でも説明できます。w3school の記事を読んだことがありますが、あまり明確ではないと思います。以下にコードを示します。これについて説明してください。

<html>
<body>
<script type="text/javascript">
var x;
var mycars = new Array();
mycars[10] = "Saab";
mycars[20] = "Volvo";
mycars[30] = "BMW";

for (x in mycars)
{
document.write(mycars[x] + "<br />");
}
</script>
</body>
</html>
4

4 に答える 4

7

for inループは、オブジェクト内のすべてのプロパティを反復処理します。

あなたの例では、x変数はオブジェクト内のすべてのプロパティを循環しmycarsます。

を追加するmycars.expensive = "Porsche";と、それも検出されます。


MDCで述べられているように、通常の配列をループするためにループを使用しないfor inでください。

Arrayを反復する方法としてこれを使用したくなるかもしれませんが、これは悪い考えです。この for...inステートメントは、配列要素に加えてユーザー定義のプロパティを反復処理するため、配列の非整数または非正のプロパティを変更すると (たとえば、"foo"プロパティを追加したり、メソッドやプロパティを に追加したりすることによって Array.prototype)、 for...inステートメントは数値インデックスに加えて、ユーザー定義プロパティの名前を返します。また、反復の順序は任意であるため、配列の反復では要素が番号順にアクセスされない場合があります。したがって、従来の forを使用することをお勧めします配列を反復処理するときに、数値インデックスを使用してループします。同様の引数は、for...in をまったく使用しない場合でも (少なくともpropertyIsEnumerable () または hasOwnProperty() チェックなしで) 使用される可能性があります。 Array.prototype の場合、そのような反復で上記のチェックを実行しない可能性のある他のライブラリを含めることによって引き起こされる名前空間の問題がなく、そのような拡張が自分自身の使用に与える影響を認識している場合、ユーザーによって便利に拡張されます。 for...in などの反復子)。

于 2010-12-30T02:13:14.977 に答える
1

最初に、3 つの項目 (配列ではなく) を持つオブジェクトを作成します。

  var mycars = new Object();
  mycars[10] = "Saab";
  mycars[20] = "Volvo";
  mycars[30] = "BMW";

ここで102030はオブジェクト プロパティです。
次に、オブジェクトをナビゲートし、すべてのプロパティにアクセスして、プロパティに関連付けられた各値を表示します。

ここで、[ for( variable in object ) expression ] JavaScript
の構築が介入します。変数は、オブジェクトの最初のプロパティに設定され、次に 2 番目、最後に設定されます。試す

  for (v in mycars) alert(v);

それがどのように機能するかを確認し、これも同様に

  for (v in mycars) alert("Property: "+v+", value: "+mycars[v]);
于 2010-12-30T02:22:09.320 に答える
0

構築はfor ... in、 の右側のオブジェクト内のすべての要素に対して繰り返されますin。あなたの場合、forステートメントの下のブロックは、 内のすべての車に対して 1 回実行されmycarsます。

于 2010-12-30T02:14:32.037 に答える
0

for in後の世代が発見できるようにバグを埋める方法です。何度も指摘されているように、配列に適用すると、配列のすべての要素、配列の長さ、その他のデータがたまたま配列に添付されている場合にループします。通常のオブジェクトに適用する方が良いですが、それでもインデックスを でフィルタリングする必要がありますhasOwnProperty

jQuery のようなフレームワーク提供の関数を使用することをお勧めします。$.each

于 2010-12-30T02:48:44.980 に答える