注: オブジェクトの一部のプロパティは、読み取り専用、永続 (削除不可)、または列挙不可能としてマークされています。これらのプロパティは、for/in ループを使用して列挙できません。すべてのユーザー定義プロパティは列挙可能ですが、すべての内部メソッドを含む多くの内部プロパティは列挙可能ではありません。さらに、オブジェクトは他のオブジェクトからプロパティを継承でき、継承されたユーザー定義プロパティは for/in ループを使用して列挙できます。
for(var i=0;i 例:
var a = ["a","b","c"];
for(var el in a){
アラート(a[el]);
}
これは a のすべての要素を列挙するためのものです。 もちろん、上記の例も使用できます
for(var i=0,len=a.length;i
}
この方法はループ内でリストするために使用されますが、場合によってはこの方法が機能しない場合があります。
例:
var a = {"最初":1,"2番目":2,"3番目":3};
現時点では、リストをすべて網羅するには for in のみを使用できます。
オブジェクトが網羅可能かどうかは、propertyIsEnumerable 属性で判断できます。説明は次のとおりです。
object.propertyIsEnumerable(propname) が for/in ループを通じてプロパティを参照できるかどうか
propname は、オブジェクト属性
の名前を含む文字列です。
オブジェクトに propname という名前の非継承プロパティがあり、そのプロパティが列挙可能である (つまり、for/in ループを使用して列挙できる) 場合、true
を返します。
for/in ステートメントを使用して、オブジェクトの「列挙可能な」プロパティを調べることができますが、JavaScript コードを通じてオブジェクトに追加されたプロパティのすべてが列挙可能であるわけではなく、オブジェクトの内部定義済みプロパティ (メソッドなど) は通常、列挙可能ではありません。
propertyIsEnumerable() メソッドはプロトタイプ チェーンをチェックしません。つまり、オブジェクトのローカル プロパティにのみ適用され、継承されたプロパティの列挙可能性を検出できません。