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

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

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

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

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

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-dom этот ответ существует уже vanillajs некоторое время, я оставлю javascript-dom вышеизложенное нетронутым. Любой, кто js читает это, должен также vanillajs прочитать ответ Ивана Невоструева objects ниже.

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

javascript

object

key

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

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