JavaScript метод getOwnPropertyNames()

JavaScript Object

Определение и применение

JavaScript метод getOwnPropertyNames() воз­вра­ща­ет массив, состоящий из всех имен собственных (неунаследованных) свойств и методов объекта (включая неперечислимые свойства и методы).

Под неперечислимыми свойствами стоит понимать те, атрибут enumerable которых имеет значение false, вследствие чего они не будут перечислимы в циклах, например в цикле for...in. Атрибуты в свою очередь описываются дескрипторами свойств – это обычные объекты JavaScript, которые описывают атрибуты и значение свойства. Подробную информацию о дескрипторах свойств и атрибутах вы можете получить в описании метода defineProperty(), который позволяет определить новое или изменить существующее свойство объекта, описывая его дескрипторами.

Если Вам необходимо вернуть имена только перечислимых свойств и методов, то Вы можете воспользоваться методом keys().


Обращаю Ваше внимание, что порядок перечислимых свойств в массиве соответствует порядку при обходе объекта циклом for...in, а порядок неперечислимых свойств, а также их местоположение среди перечислимых свойств явно не определено.


Кроме того, метод getOwnPropertyNames() не добавляет в массив символьные (Symbol) свойства. Для того, чтобы возвратить массив, состоящий из всех символьных (Symbol) свойств переданного объекта (массив символов конкретного объекта), то Вы можете воспользоваться методом getOwnPropertySymbols()ECMAScript 2015.

Поддержка браузерами

МетодChrome
Chrome
Firefox
Firefox
Opera
Opera
Safari
Safari
Internet Explorer
IExplorer
Microsoft Edge
Edge
getOwnPropertyNames()5.04.012.05.09.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