我试图获取/计算对象的属性并找到了 this QaA , 和 this cross-browser solution .
但是,Object.keys
并不总是返回与 for-in 循环
相同的结果。
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
这样的对象是否可枚举
。
即使他们是,according to Mozilla ,我们可以使用 Object.getOwnPropertyNames
代替不可枚举的属性,但它也会返回一个空数组。
谁能解释一下?是否可以在没有 for-in 循环的情况下获取对象的所有属性,如 document.body.style
?
编辑
糟糕,我只在 Firefox 上测试过。在 Osiris 发表评论之前,我意识到这只发生在 Firefox(19 和 20,这是最新版本)。 IE 9、Opera 12、Chrome 26、Safari 5 都可以。
最佳答案
document.body.style
的属性在 Firefox 中不可枚举。您可以使用以下方法轻松测试:
document.body.style.propertyIsEnumerable('background'); // FF: false, WebKit: true
关于javascript - 如何在不使用 JavaScript (Firefox) 中的 for-in 循环的情况下获取对象的所有属性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16166815/