说我这样创建一个对象:
var myObject =
{"ircEvent": "PRIVMSG", "method": "newURI", "regex": "^http://.*"};
检索属性名称列表的最佳方法是什么?即我想以一些变量“键”结束:
keys == ["ircEvent", "method", "regex"]
说我这样创建一个对象:
var myObject =
{"ircEvent": "PRIVMSG", "method": "newURI", "regex": "^http://.*"};
检索属性名称列表的最佳方法是什么?即我想以一些变量“键”结束:
keys == ["ircEvent", "method", "regex"]
采用 Reflect.ownKeys()
var obj = {a: 1, b: 2, c: 3};
Reflect.ownKeys(obj) // ["a", "b", "c"]
Object.keys和Object.getOwnPropertyNames无法获取不可枚举的属性。它甚至适用于不可枚举的属性。
var obj = {a: 1, b: 2, c: 3};
obj[Symbol()] = 4;
Reflect.ownKeys(obj) // ["a", "b", "c", Symbol()]
在支持js 1.8的浏览器下:
[i for(i in obj)]
IE不支持for(i在obj中)的本机属性。这是我能找到的所有道具的清单。
看来stackoverflow做了一些愚蠢的过滤。
该列表位于此Google组帖子的底部:-https: //groups.google.com/group/hackvertor/browse_thread/thread/a9ba81ca642a63e0
可以使用jQuery进行如下操作:
var objectKeys = $.map(object, function(value, key) {
return key;
});
即使在IE8中,这也适用于大多数浏览器,并且不需要任何类型的库。我是您的钥匙。
var myJSONObject = {"ircEvent": "PRIVMSG", "method": "newURI", "regex": "^http://.*"};
var keys=[];
for (var i in myJSONObject ) { keys.push(i); }
alert(keys);
请注意,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/
正如slashnick所指出的,您可以使用“ for in”构造来遍历对象的属性名称。但是,您将遍历对象原型链中的所有属性名称。如果你想迭代只是在对象自己的属性,你可以利用的对象#hasOwnProperty()方法。因此具有以下。
for (var key in obj) {
if (obj.hasOwnProperty(key)) {
/* useful code here */
}
}
在现代浏览器(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 getKeys
,Object.prototype.keys
以允许您调用.keys()
任何对象。扩展原型会产生一些副作用,我不建议您这样做。
以公认的答案为基础。
如果对象具有要调用的属性,请说.properties()尝试!