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 回答