для производства кода, требующего большой совместимости с клиентскими браузерами я до сих пор предполагают ответ Ивана Невоструев в выше с подкладкой для обеспечения Object.keys
в старых браузерах. Тем не менее, можно получить точную функциональность, запрошенную с использованием новой функции ECMA defineProperty
.
По состоянию на ECMAScript 5 - Object.defineProperty
По ECMA5 вы можете использовать Object.defineProperty()
определить несчетное свойство. current compatibility по-прежнему требует многого, но в конечном итоге это должно стать удобным во всех браузерах. (В частности, обратите внимание на текущую несовместимость с IE8!)
Object.defineProperty(Object.prototype, 'keys', {
value: function keys() {
var keys = [];
for(var i in this) if (this.hasOwnProperty(i)) {
keys.push(i);
}
return keys;
},
enumerable: false
});
var o = {
'a': 1,
'b': 2
}
for (var k in o) {
console.log(k, o[k])
}
console.log(o.keys())
# OUTPUT
# > a 1
# > b 2
# > ["a", "b"]
Однако, поскольку ECMA5 уже добавил Object.keys
вы можете также использовать:
Object.defineProperty(Object.prototype, 'keys', {
value: function keys() {
return Object.keys(this);
},
enumerable: false
});
Оригинальный ответ
Object.prototype.keys = function()
{
var keys = [];
for(var i in this) if (this.hasOwnProperty(i))
{
keys.push(i);
}
return keys;
}
Редактировать: Поскольку этот ответ был на какое-то время, я оставлю это не тронутым. Любой, кто это читает, должен также прочитать ответ Ивана Невоструева ниже.
Невозможно сделать функции прототипа неперечислимыми, что приводит к тому, что они всегда включаются в петли for-in, которые не используют hasOwnProperty
. Я все еще думаю, что этот ответ был бы идеальным, если бы расширение прототипа Object не было настолько грязным.
I Я просто вскакиваю в javascript, но этот пост может вам помочь. http://dean.edwards.name/weblog/2006/07/enum/ – 2008-08-20 21:47:42
Возможный дубликат [Получить массив ключей объекта] (http://stackoverflow.com/questions/8763125/get-array-of-objects- ключи) – blo0p3r 2016-02-02 13:48:01
Как получить значения из ключей? Кроме того, количество ключей в хеше. – 2016-05-10 19:52:29