Как найти ключи объекта?

Для производственного кода, требующего objects большой совместимости с клиентскими object браузерами, я по-прежнему .js рекомендую Ivan Nevostruev's answer с прокладкой, чтобы keys обеспечить Object.keys в старых браузерах. Однако objects можно получить требуемую objects функциональность с помощью javascript новой функции ECMA defineProperty.

Начиная с ECMAScript 5 — Object.defineProperty

Начиная object с ECMA5, вы можете использовать vanillajs Object.defineProperty() для определения неперечислимых javascript-execution свойств. current compatibility по-прежнему оставляет object желать лучшего, но в конечном key итоге он должен стать доступным object для использования во всех objects браузерах. (Особенно обратите js внимание на текущую несовместимость javascript-dom с 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"]

Однако, поскольку ecmascript ECMA5 уже добавил Object.keys, вы также vanilla-javascript можете использовать:

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;
}

Редактировать: Поскольку javascript-library этот ответ существует уже js некоторое время, я оставлю javascript-execution вышеизложенное нетронутым. Любой, кто vanilla-js читает это, должен также vanilla-js прочитать ответ Ивана Невоструева objects ниже.

Невозможно сделать функции-прототипы vanillajs неперечислимыми, что приводит javascript к тому, что они всегда появляются javascript-execution в циклах for-in, которые javascript не используют hasOwnProperty. Я все еще vanilla-js думаю, что этот ответ был javascript-dom бы идеальным, если бы расширение js прототипа Object не было keys таким запутанным.

javascript

object

key

2022-11-20T03:27:11+00:00
Вопросы с похожей тематикой, как у вопроса:

Как найти ключи объекта?