假设我这样创建一个对象:
var myObject =
{"ircEvent": "PRIVMSG", "method": "newURI", "regex": "^http://.*"};
检索属性名列表的最佳方法是什么?例如,我想以一些变量“键”结束,这样:
keys == ["ircEvent", "method", "regex"]
假设我这样创建一个对象:
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