JavaScript метод Object.getOwnPropertyNames()
Определение и применение
JavaScript метод getOwnPropertyNames() возвращает массив, состоящий из всех имен собственных
(неунаследованных) свойств и методов объекта (включая неперечислимые свойства и методы).
Под неперечислимыми свойствами стоит понимать те, атрибут enumerable которых имеет значение
false, вследствие чего они не будут перечислимы в циклах, например в цикле for...in.
Атрибуты в свою очередь описываются дескрипторами свойств – это обычные объекты JavaScript,
которые описывают атрибуты и значение свойства. Подробную информацию о дескрипторах свойств и атрибутах вы можете
получить в описании метода
defineProperty(), который позволяет определить новое или изменить существующее свойство объекта, описывая его дескрипторами.
Если Вам необходимо вернуть имена только перечислимых свойств и методов, то Вы можете воспользоваться методом
keys().
Кроме того, метод getOwnPropertyNames() не добавляет в массив символьные (Symbol) свойства.
Для того, чтобы возвратить массив, состоящий из всех символьных (Symbol) свойств переданного объекта
(массив символов конкретного объекта), то Вы можете воспользоваться методом
getOwnPropertySymbols().
Поддержка браузерами
Спецификация: ecma262
Поддерживается во всех основных браузерах с 2015 года.
| Возможность | Компьютеры | Мобильные | ||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|
getOwnPropertyNames | 5 | 12 | 4 | 12 | 5 | 18 | 4 | 12 | 5 | 1.0 | 4.4 | 5 |
поддерживаетсяс ограниченияминет поддержкинет данных≤31 — не позднее версии 31
JavaScript синтаксис
Object.getOwnPropertyNames( obj );
Спецификация
ECMAScript: Object.getOwnPropertyNames()
Значения параметров
| Параметр | Описание |
|---|---|
obj |
Объект, собственные (неунаследованных) свойства и методы которого должны быть возвращены в виде массива (включая неперечислимые свойства и методы). Обязательное значение. |
Исключения
| Тип исключения | Описание |
|---|---|
TypeError |
null и undefined вызывают TypeError. Остальные примитивы преобразуются
в объекты-обёртки.
|
Примеры, попробуйте сами
В примере «Строковые ключи и неперечислимая длина» показан результат вызова метода.
Строковые ключи и неперечислимая длина
Измените свойства исходного объекта и сравните результат до и после вызова метода.
index.html
<html lang="ru">
<head>
<meta charset="UTF-8" />
<title>Строковые ключи и неперечислимая длина</title>
</head>
<body>
<p>Результат выполнения выводится в консоль.</p>
</body>
</html>
main.js
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()
возвращает только собственные (неунаследованные) перечислимые свойства и методы.