如何遍历所有对象属性

3
我希望你能遍历所有对象属性。我尝试使用以下方法来实现:
for( var key in obj)

但那并没有给我所有的属性。例如,没有键“click”。但是,当我尝试执行

obj['click']

我有一个问题。

我正在尝试在IE7上完成这个操作。


你得到的这个 something 是什么? - Ofir Israel
如果您正在正确迭代,可能正在使用hasOwnProperty,例如https://dev59.com/pXNA5IYBdhLWcg3wh-cC#921808,因此跳过在“父”对象中定义的属性。 - xanatos
2个回答

3
for .. in循环遍历所有可枚举属性,而不是所有属性。
所以我怀疑要么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
}

您可以使用Object.propertyIsEnumerable()方法测试属性是否可枚举(即在for .. in循环中可访问):

obj.propertyIsEnumerable('stealth') === false

有没有可能获取所有属性? - John Smith
1
@JohnSmith - 是的,它是 Object.getOwnPropertyNames(obj); 但在IE 9之前的版本不支持。 - kamituel

1

for/in循环遍历所有可枚举属性,包括从祖先原型继承的属性。如果您只想获取“您的对象”的属性,请使用Object.keys()

Object.keys(yourobject).forEach(function(propertyName) {
  var value = yourobject[propertyName];
  console.log(propertyName + ":", value);
});

这是一个非常有用的概念。谢谢。 - Jazzy

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接