javascript - 如何在不使用 JavaScript (Firefox) 中的 for-in 循环的情况下获取对象的所有属性?

标签 javascript object properties key

我试图获取/计算对象的属性并找到了 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/

相关文章:

C# 通用类的模式匹配属性?

javascript - 关闭禁用表单控件的验证 Angular

java - JAVA对象创建

java - 如何在 Spring @Value 注解中正确指定默认值?

javascript - 如何从对象数组创建 TreeView 表 - Javascript

javascript - JS 对象导航——什么时候使用 object.sub 和 object ["sub"]?

java - 如何从 java.util.Properties 对象创建分层 JSON

javascript - react : Add Event Listener to props without wrapper html tag

javascript - 根据用户输入创建多步骤表单

javascript - 在node js查询mysql中使用全局变量