Object.getOwnPropertyNames()
Базовый уровень Широко доступно
Эта функция хорошо зарекомендовала себя и работает на многих устройствах и в различных версиях браузеров. Она доступна во всех браузерах с июля 2015 года.
Статический метод Object.getOwnPropertyNames() возвращает массив всех свойств (включая неперечислимые свойства, за исключением тех, которые используют Symbol), найденных непосредственно в данном объекте.
Попробуйте
const object = {
a: 1,
b: 2,
c: 3,
};
console.log(Object.getOwnPropertyNames(object));
// Expected output: Array ["a", "b", "c"]
Синтаксис
Object.getOwnPropertyNames(obj)
Параметры
-
obj - Объект, перечислимые и неперечислимые свойства которого должны быть возвращены.
Возвращаемое значение
Массив строк, который соответствует свойствам, найденным непосредственно в данном объекте.
Описание
Object.getOwnPropertyNames() возвращает массив, элементы которого являются строками, соответствующими перечислимым и неперечислимым свойствам, найденным непосредственно в данном объекте obj. Порядок перечислимых свойств в массиве соответствует порядку, который выявляется циклом for...in (или Object.keys()) при переборе свойств объекта. Неотрицательные целочисленные ключи объекта (как перечислимые, так и неперечислимые) добавляются в массив сначала в порядке возрастания, а затем следуют строковые ключи в порядке их вставки.
В ES5, если аргумент этого метода не является объектом (примитивом), это вызовет TypeError. В ES2015 аргумент, не являющийся объектом, будет приведён к объекту.
Object.getOwnPropertyNames("foo");
// TypeError: "foo" is not an object (ES5 code)
Object.getOwnPropertyNames("foo");
// ["0", "1", "2", "length"] (ES2015 code)
Примеры
Использование Object.getOwnPropertyNames()
const arr = ["a", "b", "c"];
console.log(Object.getOwnPropertyNames(arr).sort());
// ["0", "1", "2", "length"]
// Array-like object
const obj = { 0: "a", 1: "b", 2: "c" };
console.log(Object.getOwnPropertyNames(obj).sort());
// ["0", "1", "2"]
Object.getOwnPropertyNames(obj).forEach((val, idx, array) => {
console.log(`${val} -> ${obj[val]}`);
});
// 0 -> a
// 1 -> b
// 2 -> c
// non-enumerable property
const myObj = Object.create(
{},
{
getFoo: {
value() {
return this.foo;
},
enumerable: false,
},
},
);
myObj.foo = 1;
console.log(Object.getOwnPropertyNames(myObj).sort()); // ["foo", "getFoo"]
Если вам нужны только перечислимые свойства, см. Object.keys() или используйте цикл for...in (обратите внимание, что это также вернет перечислимые свойства, найденные вдоль цепочки прототипов объекта, если только последние не отфильтрованы с помощью Object.hasOwn()).
Элементы в цепочке прототипов не перечисляются:
function ParentClass() {}
ParentClass.prototype.inheritedMethod = function () {};
function ChildClass() {
this.prop = 5;
this.method = function () {};
}
ChildClass.prototype = new ParentClass();
ChildClass.prototype.prototypeMethod = function () {};
console.log(Object.getOwnPropertyNames(new ChildClass()));
// ["prop", "method"]
Получение только неперечислимых свойств
Здесь используется функция Array.prototype.filter() для удаления перечислимых ключей (полученных с помощью Object.keys()) из списка всех ключей (полученных с помощью Object.getOwnPropertyNames()), что позволяет получить на выходе только неперечислимые ключи.
const target = myObject; const enumAndNonEnum = Object.getOwnPropertyNames(target); const enumOnly = new Set(Object.keys(target)); const nonEnumOnly = enumAndNonEnum.filter((key) => !enumOnly.has(key)); console.log(nonEnumOnly);
Спецификации
Совместимость с браузерами
| Desktop | Mobile | Server | |||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Chrome | Edge | Firefox | Opera | Safari | Chrome Android | Firefox for Android | Opera Android | Safari on iOS | Samsung Internet | WebView Android | WebView on iOS | Bun | Deno | Node.js | |
getOwnPropertyNames |
5 |
12 |
4 |
12 |
5 |
18 |
4 |
12 |
5 |
1.0 |
4.4 |
5 |
1.0.0 |
1.0 |
0.10.0 |
Смотрите также
- Polyfill of
Object.getOwnPropertyNamesincore-js - Перечислимость и владение свойствами
Object.hasOwn()Object.prototype.propertyIsEnumerable()Object.create()Object.keys()Array.prototype.forEach()
© 2005–2025 MDN contributors.
Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/getOwnPropertyNames