我試圖獲得/計數一個對象的屬性,發現this QaA和this cross-browser solution。如何在不使用JavaScript中的for-in循環(Firefox)的情況下獲取對象的所有屬性?
但是,Object.keys
並不總是返回與for-in loop
相同的值。
var obj = {foo: "foo", bar: "bar"};
// foo, bar
console.log(Object.keys(obj));
// foo, bar
for(var p in obj) {
console.log(p);
}
var obj = document.body.style;
// [] <-- empty array
console.log(Object.keys(obj));
// background, backgroundImage, border, fontFamily...
for(var p in obj) {
console.log(p);
}
我不知道,如果像document.body.style
對象enumerable
。我們可以使用Object.getOwnPropertyNames
代替無枚舉屬性,但它也返回一個空數組。
有人可以解釋這一點嗎?是否有可能獲得像document.body.style
這樣的對象的所有屬性,而無需for-in循環?
編輯
糟糕,我只用Firefox進行了測試。在Osiris發表評論之前,我意識到這隻發生在Firefox(19和20是最新版本)。 IE 9,Opera 12,Chrome 26,Safari 5都很好。
在Chrome的DevTools中,Object.keys(document.body.style)'返回一個由394個元素組成的數組。 – Osiris 2013-04-23 10:19:06