2013-08-31 208 views
3

我想循環遍歷所有對象屬性。我試圖通過使用如何遍歷所有對象屬性

for(var key in obj) 

但這並沒有給我所有的屬性。例如,沒有鍵'點擊'。但是當我嘗試做

obj['click'] 

我得到了一些東西。

我試圖做到這一點在IE7

+0

這是什麼__something__你得到? –

+0

如果你正在迭代,也許你正在使用'hasOwnProperty',就像http://stackoverflow.com/a/921808/613130,所以你跳過了在「父」對象中定義的屬性。 – xanatos

回答

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 
+0

有沒有可能獲得所有房產? –

+1

@JohnSmith - 是的,它是'Object.getOwnPropertyNames(obj);'但它在版本9之前不支持IE。 – kamituel

1

For/in運行在所有可枚舉的屬性上,包括那些從祖先原型繼承的屬性。如果你只是想要那些「你的對象」,使用Object.keys()

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

這是一個非常有用的概念。謝謝。 – Jazzy