2

重複の可能性:
JavaScriptfor…invs for

関数でforループを使用しています。for in「 」と「 」の両方のタイプのループを使用しますfor。どちらも同じ結果を生成しているので、これらのループの違いと、どちらのループを使用するかを知る方法を知りたいと思います。

<script type="text/javascript">
var jam = ['amit','sam','ram','soly']
for(var i in jam){
alert(jam[i])
}
//for (i=0; i<jam.length; i++) {
//  jam[i]
//alert(jam[i].length)
//}
</script>
</head>
<body>
</body>
4

3 に答える 3

2

明確に理解した方を使用できます。アレイの場合、両方のケースを使用できます。

使用できるアレイの場合

for (var i = 0; i < a.length; i++){
  //do something
}

使用できるオブジェクトの場合

for ( var i in obj){
  //do something
}

オブジェクトの長さを取得できないため。

于 2012-08-03T05:46:40.993 に答える
2

それはあなたが必要とするものに依存します。短い形式であるため、通常はfor-inループを使用しますが、反復変数を制御したい場合もあります。たとえば、偶数のインデックスを反復処理する場合は、通常のforループを使用する必要があります。

for (var i = 0; i < myarray.length; i+=2) {...}

たとえば、逆方向に反復する場合も同様です。

for (var i = myarray.length-1; i >= 0; i--) {...}

確かに、オブジェクトの場合、for-inループを使用すると、反復変数でプロパティ名を取得できます。例えば:

var myobject = {year: 1992, city: "Barcelona"}
for (var propname in myobject) alert(propname + " = " + myobject[propname]);

あなたの例では、単純な反復を行っているため、for-inを使用します。さらに、最適化されていないJavascriptコンパイラ/インタプリタでは、変数のインクリメントが内部で行われるため、for-inループはさらに高速になると思います(つまり、「i ++」などのJavascriptステートメントではありません)。

于 2012-08-03T06:19:34.083 に答える
2

forループはiterate、インクリメント/デクリメント中に行うことを目的としています。

// note that I'm making this big and ugly to show what's going on
var incrementor = 1, length = 10,
    array = [ "one", "two", "three", "four", "five",
              "six", "seven", "eight", "nine", "ten" ];

for (; incrementor <= length; incrementor = incrementor + 1) {
    console.log(incrementor);  // 1,2,3,...,10
    console.log( array[incrementor - 1] );  // "one", "two", "three", ..., "ten"
}

for ... in ...ループはenumerate、オブジェクトのプロパティを通過することを目的としています。

var object = { "key1" : "one", "key2" : "two", "key3" : "three" },
    key = "";

for (key in object) {
    console.log(key); // "key1", "key2", "key3"
    console.log( object[key] ); // "one", "two", "three"
}

配列に使用する理由forは、悪いブラウザでfor ... in ...は、数値プロパティ(つまり、:)を含めることができるだけでなく、必要のkey=0, key=1,...ないものを列挙することもできるためですkey=splice, key=length, key=unshift。このコードをプロのサイトで実行している場合、特定のハードウェアで実行されているJSの特殊なバージョン、またはUnityやUnrealEditorのUnrealScriptなどのプログラムでスクリプト言語として実行されている場合はあまり良いことではありません。

onオブジェクトを使用しない理由は、iterator通常、次のようなオブジェクトを作成しないためです。

var obj = { "0" : "zero", "1" : "one", "2" : "two" };

そして、あなたがそうしたとしても(例えば、jQueryはこのようなことをします)、列挙したい単語ベースのプロパティがあるかもしれませんが、数えているので、それはできません。

また、注意することが重要enumeratingですfor ... in ...。withはその機能が標準化されていません。これが意味するのは、期待した順序で値を吐き出すことが100%保証されていないということです。ループの進行に依存している場合0,1,2,3,...for ... in ...ブラウザの100%がそのように動作することを保証することはできません。 、100%の時間-ほとんどのブラウザがほとんどの場合それを正しく理解しているとしても。

ほとんどの場合、現在、先入れ先出しのルールに従っています。のようにオブジェクトを作成すると{ one : 1, two : 2, three : 3 }、最新のブラウザはすべてを印刷します1,2,3。次のようにオブジェクトを作成すると、次のよう{ two: 2, one: 1, six: 6 }になります2,1,6

しかし、それは「すべき」時間の95%であり、「そうする」時間の100%ではありません。

于 2012-08-03T06:29:40.670 に答える