如何列出JavaScript对象的属性?

说我这样创建一个对象:

var myObject =
        {"ircEvent": "PRIVMSG", "method": "newURI", "regex": "^http://.*"};

检索属性名称列表的最佳方法是什么?即我想以一些变量“键”结束:

keys == ["ircEvent", "method", "regex"]
NearSamHarry2020/03/10 12:13:38

以公认的答案为基础。

如果对象具有要调用的属性,请说.properties()尝试!

var keys = Object.keys(myJSONObject);

for (var j=0; j < keys.length; j++) {
  Object[keys[j]].properties();
}
Eva凯2020/03/10 12:13:38

采用 Reflect.ownKeys()

var obj = {a: 1, b: 2, c: 3};
Reflect.ownKeys(obj) // ["a", "b", "c"]

Object.keysObject.getOwnPropertyNames无法获取不可枚举的属性。它甚至适用于不可枚举的属性。

var obj = {a: 1, b: 2, c: 3};
obj[Symbol()] = 4;
Reflect.ownKeys(obj) // ["a", "b", "c", Symbol()]
逆天小卤蛋Green2020/03/10 12:13:38

在支持js 1.8的浏览器下:

[i for(i in obj)]
Sam小哥逆天2020/03/10 12:13:38

IE不支持for(i在obj中)的本机属性。这是我能找到的所有道具的清单。

看来stackoverflow做了一些愚蠢的过滤。

该列表位于此Google组帖子的底部:-https: //groups.google.com/group/hackvertor/browse_thread/thread/a9ba81ca642a63e0

飞云逆天2020/03/10 12:13:38

可以使用jQuery进行如下操作:

var objectKeys = $.map(object, function(value, key) {
  return key;
});
JinJin理查德2020/03/10 12:13:38

即使在IE8中,这也适用于大多数浏览器,并且不需要任何类型的库。我是您的钥匙。

var myJSONObject =  {"ircEvent": "PRIVMSG", "method": "newURI", "regex": "^http://.*"}; 
var keys=[];
for (var i in myJSONObject ) { keys.push(i); }
alert(keys);
Davaid梅2020/03/10 12:13:38

请注意,Firefox 4,Chrome 6,Safari 5,IE 9和更高版本支持Object.keys和其他ECMAScript 5方法。

例如:

var o = {"foo": 1, "bar": 2}; 
alert(Object.keys(o));

ECMAScript 5兼容性表:http : //kangax.github.com/es5-compat-table/

新方法的说明:http : //markcaudill.com/index.php/2009/04/javascript-new-features-ecma5/

猿小小2020/03/10 12:13:38
StafanMandy2020/03/10 12:13:38

正如slashnick所指出的,您可以使用“ for in”构造来遍历对象的属性名称。但是,您将遍历对象原型链中的所有属性名称。如果你想迭代只是在对象自己的属性,你可以利用的对象#hasOwnProperty()方法。因此具有以下。

for (var key in obj) {
    if (obj.hasOwnProperty(key)) {
        /* useful code here */
    }
}
伽罗Mandy2020/03/10 12:13:37

在现代浏览器(IE9 +,FF4 +,Chrome5 +,Opera12 +,Safari5 +)中,您可以使用内置的Object.keys方法:

var keys = Object.keys(myObject);

上面有完整的polyfill,但简化的版本是:

var getKeys = function(obj){
   var keys = [];
   for(var key in obj){
      keys.push(key);
   }
   return keys;
}

或者替换为var getKeysObject.prototype.keys以允许您调用.keys()任何对象。扩展原型会产生一些副作用,我不建议您这样做。