3

すべてのオブジェクト プロパティを繰り返し処理します。私はこれを使用してこれをやろうとしていました

for( var key in obj)

しかし、それですべてのプロパティが得られるわけではありません。たとえば、「クリック」というキーはありません。しかし、私がやろうとすると

obj['click']

私は何かを得た。

私はIE7でこれをやろうとしています

4

2 に答える 2

3

ループは、すべてのプロパティではなく、すべてのプロパティをfor .. in反復します。enumerable

したがって、clickが列挙できないか、何かを見逃していると思われます。

for .. inループ経由で利用できないプロパティを設定する方法の例:

var obj = {};

Object.defineProperty(obj, "stealth", {
  enumerable: false,
  value: "you don't iterate over me"
});

// obj.stealth === "you don't iterate over me"

for (var i in obj) {
  // Loop will not enter here
}

次のメソッドfor .. inを使用して、プロパティが列挙可能かどうか (つまり、ループでアクセスできるかどうか) をテストできます。Object.propertyIsEnumerable()

obj.propertyIsEnumerable('stealth') === false
于 2013-08-31T13:55:08.400 に答える
1

for/in は、祖先プロトタイプから継承されたものを含む、すべての列挙可能なプロパティに対して実行されます。「あなたのオブジェクト」用のものだけが必要な場合は、次を使用しますObject.keys()

Object.keys(yourobject).forEach(function(propertyName) {
  var value = yourobject[propertyName];
  console.log(propertyName + ":", value);
});
于 2013-08-31T16:33:53.730 に答える