Большинство основных браузеров теперь имеют эту встроенную функциональность, метод - Object.keys()
:
var keys = Object.keys(options);
//-> ["key1", "key2"]
Вы также можете использовать небольшой фрагмент кода для реализации этого в браузерахкоторые его не поддерживают:
Object.keys = Object.keys || (function () {
var hasOwnProperty = Object.prototype.hasOwnProperty;
return function (o) {
if (typeof o != "object" && typeof o != "function" || o === null)
throw new TypeError("Object.keys called on a non-object");
var result = [];
for (var name in o) {
if (hasOwnProperty.call(o, name))
result.push(name);
}
return result;
};
})();
Этот фрагмент работает почти так же, как в примере Ника Крейвера, с двумя исключениями:
- Он выдаст значимую ошибку TypeError, если выпередать что-либо, кроме Object, в (или «ассоциативный массив», если хотите).
- Это обойдет раздражающую проблему, связанную с DOM в Internet Explorer, когда коллекции не имеют метода
hasOwnProperty
.
Однако этот (и другие ответы здесь) не работают вокруг ошибки перечисления IE.Вы можете найти больше информации и частичное решение для этого на этот ответ здесь .