JavaScript метод Object.getOwnPropertyNames()

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

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

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

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

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

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

Спецификация: ecma262

Поддерживается во всех основных браузерах с 2015 года.

Показать браузеры
Совместимостьjavascript.builtins.Object.getOwnPropertyNames
ВозможностьКомпьютерыМобильные
ChromeEdgeFirefoxOperaSafariChrome AndroidFirefox for AndroidOpera AndroidSafari on iOSSamsung BrowserWebView AndroidWebView on iOS
getOwnPropertyNames✓5✓12✓4✓12✓5✓18✓4✓12✓5✓1.0✓4.4✓5

поддерживаетсяс ограниченияминет поддержкинет данных≤31 — не позднее версии 31

JavaScript синтаксис

JavaScript
Object.getOwnPropertyNames( obj );

Спецификация

ECMAScript: Object.getOwnPropertyNames()

Значения параметров

Object: справочные сведения
Параметр Описание
obj Объект, собственные (неунаследованных) свойства и методы которого должны быть возвращены в виде массива (включая неперечислимые свойства и методы). Обязательное значение.

Исключения

Object: справочные сведения
Тип исключения Описание
TypeError null и undefined вызывают TypeError. Остальные примитивы преобразуются в объекты-обёртки.

Примеры, попробуйте сами

В примере «Строковые ключи и неперечислимая длина» показан результат вызова метода.

Строковые ключи и неперечислимая длина

Измените свойства исходного объекта и сравните результат до и после вызова метода.

index.html
HTML
<!doctype html>
<html lang="ru">
  <head>
    <meta charset="UTF-8" />
    <title>Строковые ключи и неперечислимая длина</title>
  </head>
  <body>
    <p>Результат выполнения выводится в консоль.</p>
  </body>
</html>
main.js
JavaScript
let obj = {
    // инициализируем переменную, содержащую объект
    a: 1,
    b: 2,
    c() {
        return this.a + this.b
    },
}
let arr = ['a', 'b', 'c'] // инициализируем переменную, содержащую массив
let str = 'string' // инициализируем переменную, содержащую строку

// возвращаем массив, состоящий из всех имен собственных свойств и методов объекта

console.log(Object.keys(obj)) // ["a", "b", "c"]
console.log(Object.getOwnPropertyNames(obj)) // ["a", "b", "c"]

console.log(Object.keys(arr)) // ["0", "1", "2"]
console.log(Object.getOwnPropertyNames(arr)) // ["0", "1", "2", "length"]

console.log(Object.keys(str)) // ["0", "1", "2", "3", "4", "5"]
console.log(Object.getOwnPropertyNames(str)) // ["0", "1", "2", "3", "4", "5", "length"]

В этом примере мы инициализировали три переменные, содержащие объект, массив и строку. В первом случае с помощью метода getOwnPropertyNames() мы возвращаем массив, состоящий из всех имен собственных (неунаследованных) свойств и методов объекта. Обратите внимание, что при вызове метода на строке и массиве, переменная сначала приводится к объекту.

Обратите внимание на отличие вызова методов keys() и getOwnPropertyNames(), метод getOwnPropertyNames() возвращает так же неперечислимые свойства и методы, в данном случае свойство length неперечислимо (имеет значение атрибута enumerable равное false), а метод keys() возвращает только собственные (неунаследованные) перечислимые свойства и методы.