jsでのfor inの使い方

2087 ワード

for(var i=0;i
例:
var a = ["a","b","c"];
for(var el in a){
 alert(a[el]);
}
これはaの中のすべての要素を挙げて、もちろん上のこの例は使うことができます
for(var i=0,len=a.length;i  alert(a[i]);
}
この方法はループリストされていますが、必ずしも効果的ではない場合があります.
例:
var a = {"first":1,"second":2,"third":3};
この時はforinで貧乏にするしかありません.
1つのオブジェクトがfor in窮挙を行うことができるかどうかは、propertyIsEnumerableプロパティによって判断できます.次のように説明します.
propertyIsEnumerableプロパティ
指定した属性がオブジェクトの一部であるかどうか、およびその属性が列挙可能であるかどうかを示すBoolean値を返します.
object.propertyIsEnumerable(proName)
パラメータ
object
必須オプション.1つのオブジェクト.
proName
必須オプション.属性名の文字列値.
説明
ProNameがobjectに存在し、For...Inループを使用して穷挙できる場合、propertyIsEnumerableプロパティはtrueを返します.objectが指定した属性を持たない場合、または指定した属性が列挙できない場合、propertyIsEnumerable属性はfalseを返します.一般に、事前定義された属性は列挙可能ではなく、ユーザ定義の属性は常に列挙可能である.
propertyIsEnumerableプロパティは、プロトタイプチェーン内のオブジェクトを考慮しません.
--------------------
JAvascriptにおけるfor inとfor each inの使い方と違い
違い1:for inはjavascript 1.0で公開されています.for each inは、ECMAScript規格の一部ではなく、E 4 X規格の一部としてjavascript 1.6で公開されています.これは、さまざまなブラウザの互換性に問題があることを意味します.for each inは、多くのブラウザでサポートされていません.例えば、IE 6、IE 7、IE 8などのブラウザはサポートされていません. 
違い2:
例:
 var    = {  :"15",  :"25" }; 
 for (var i in    ){ 
 alert( i + "," +    [i] ); 
 } 

結果は、高さ、15;幅、25;
      :  ,15 ;  ,25 ; 
 for each (var i in    ){ 
 alert( i + "," +    [i] ); 
 } 

結果は15,undefinedの順であった.25, undefined;
2つの遍歴メソッドの変数iの値は異なり、for each inはオブジェクトの属性名を取得できず、属性値しか取得できません.
最後に使用提案をまとめます.
(1)普通の配列を遍歴して、原生の遍歴方法forを使うことを提案して、便利さを貪らないでください、forinとfor each inはすべてブラウザの互換性の問題があるため、それらが配列の遍歴順序に対して保証することができません(順序に対して要求しないならば、forinを使うことができて、しかし本人は提案しません)、興味があれば、《forinのブラウザの互換性の問題》を読むことができます.
(2)遍歴対象は,forが理想的な遍歴を提供できないため,他の方法しか選択できない.ここではfor inを使用することをお勧めします.上記の違いから、for inはfor eachよりも優れています.forinはインデックスと属性値を取得できますが、for eachは属性値しか取得できません.また、for eachは多くの低バージョンのブラウザではサポートされていません.
ソース:http://blog.sina.com.cn/s/blog_855dfd9e0101a2w0.html