JavaScript метод getOwnPropertyNames()
JavaScript ObjectОпределение и применение
JavaScript метод getOwnPropertyNames() возвращает массив, состоящий из всех имен собственных (неунаследованных) свойств и методов объекта (включая неперечислимые свойства и методы).
Под неперечислимыми свойствами стоит понимать те, атрибут enumerable которых имеет значение false, вследствие чего они не будут перечислимы в циклах, например в цикле for...in. Атрибуты в свою очередь описываются дескрипторами свойств – это обычные объекты JavaScript, которые описывают атрибуты и значение свойства. Подробную информацию о дескрипторах свойств и атрибутах вы можете получить в описании метода defineProperty(), который позволяет определить новое или изменить существующее свойство объекта, описывая его дескрипторами.
Если Вам необходимо вернуть имена только перечислимых свойств и методов, то Вы можете воспользоваться методом keys().
Обращаю Ваше внимание, что порядок перечислимых свойств в массиве соответствует порядку при обходе объекта циклом for...in, а порядок неперечислимых свойств, а также их местоположение среди перечислимых свойств явно не определено.
Кроме того, метод getOwnPropertyNames() не добавляет в массив символьные (Symbol) свойства. Для того, чтобы возвратить массив, состоящий из всех символьных (Symbol) свойств переданного объекта (массив символов конкретного объекта), то Вы можете воспользоваться методом getOwnPropertySymbols().
Поддержка браузерами
Метод | Chrome | Firefox | Opera | Safari | IExplorer | Edge |
---|---|---|---|---|---|---|
getOwnPropertyNames() | 5.0 | 4.0 | 12.0 | 5.0 | 9.0 | Да |
JavaScript синтаксис:
Object.getOwnPropertyNames( obj );
Версия JavaScript
ECMAScript 5.1 (реализовано в JavaScript 1.8.5)Значения параметров
Параметр | Описание |
---|---|
obj | Объект, собственные (неунаследованных) свойства и методы которого должны быть возвращены в виде массива (включая неперечислимые свойства и методы). Обязательное значение. |
Исключения
Тип исключения | Описание |
---|---|
TypeError | Возникает в том случае, если значение параметра, определяющее целевой объект не является объектом. Начиная с версии ECMAScript 6 параметр, который не является объектом будет сначала приведён к объекту. |
Пример использования
let obj = { // инициализируем переменную, содержащую объект a: 1, b: 2, c: () => (this.a + this.b) }; let arr = ["a", "b", "c"]; // инициализируем переменную, содержащую массив let str = "string"; // инициализируем переменную, содержащую строку // возвращаем массив, состоящий из всех имен собственных свойств и методов объекта Object.keys( obj ); // ["a", "b", "c"] Object.getOwnPropertyNames( obj ); // ["a", "b", "c"] Object.keys( arr ); // ["0", "1", "2"] Object.getOwnPropertyNames( arr ); // ["0", "1", "2", "length"] Object.keys( str ); // ["0", "1", "2", "3", "4", "5"] Object.getOwnPropertyNames( str ); // ["0", "1", "2", "3", "4", "5", "length"]
В этом примере мы инициализировали три переменные, содержащие объект, массив и строку. В первом случае с помощью метода getOwnPropertyNames() мы возвращаем массив, состоящий из всех имен собственных (неунаследованных) свойств и методов объекта. Обратите внимание, что при вызове метода на строке и массиве, переменная сначала приводится к объекту.
Обратите внимание на отличие вызова методов keys() и getOwnPropertyNames(), метод getOwnPropertyNames() возвращает так же неперечислимые свойства и методы, в данном случае свойство length неперечислимо (имеет значение атрибута enumerable равное false), а метод keys() возвращает только собственные (неунаследованные) перечислимые свойства и методы.
JavaScript Object