假设我这样创建一个对象:

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

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

keys == ["ircEvent", "method", "regex"]

当前回答

注意Object。Firefox 4、Chrome 6、Safari 5、IE 9及以上版本均支持key和其他ECMAScript 5方法。

例如:

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

ECMAScript 5兼容性表

新方法描述

其他回答

在ES6及后续版本(ECMAScript 2015)中,你可以获得所有属性,如下所示:

let keys = Object.keys(myObject);

如果你想列出所有的值

let values = Object.keys(myObject).map(key => myObject[key]);

这可以在大多数浏览器中工作,甚至在IE8中,并且不需要任何类型的库。Var I是你的钥匙。

var myJSONObject =  {"ircEvent": "PRIVMSG", "method": "newURI", "regex": "^http://.*"}; 
var keys=[];
for (var i in myJSONObject ) { keys.push(i); }
alert(keys);

可以用jQuery这样做:

var objectKeys = $.map(object, function(value, key) {
  return key;
});

在支持js 1.8的浏览器下:

[i for(i in obj)]

Object.getOwnPropertyNames (obj)

除了Object.keys(obj)所显示的属性外,该函数还显示不可枚举的属性。

在JS中,每个属性都有几个属性,包括一个布尔枚举。

一般来说,不可枚举的属性更“内在化”,使用也更少,但有时深入研究它们以了解真正发生的事情是很有见地的。

例子:

var o = Object.create({base:0}) Object.defineProperty(o, 'yes', {enumerable: true}) Object.defineProperty(o, 'not', {enumerable: false}) console.log (Object.getOwnPropertyNames (o)) // ['yes', 'not'] console.log(种(o)) // ['yes'] For (var x in o) console.log (x) //是的,base

还要注意如何:

对象。getOwnPropertyNames和Object。钥匙不是沿着原型链往上找底座的 For in

更多关于原型链的信息,请访问:https://stackoverflow.com/a/23877420/895245