Spec-Zone.ru › JavaScript

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);

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

Спецификация
ECMAScript® 2027 Language Specification
# sec-object.getownpropertynames

Совместимость с браузерами

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.getOwnPropertyNames in core-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

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API