Object.getOwnPropertyNames()

Baseline Widely available

This feature is well established and works across many devices and browser versions. It’s been available across browsers since July 2015.

Die statische Methode Object.getOwnPropertyNames() gibt ein Array aller Eigenschaften (einschließlich nicht-auflistbarer Eigenschaften, außer solchen, die Symbole verwenden) zurück, die direkt in einem gegebenen Objekt gefunden werden.

Probieren Sie es aus

const object1 = {
  a: 1,
  b: 2,
  c: 3,
};

console.log(Object.getOwnPropertyNames(object1));
// Expected output: Array ["a", "b", "c"]

Syntax

js
Object.getOwnPropertyNames(obj)

Parameter

obj

Das Objekt, dessen aufzählbare und nicht-auflistbare Eigenschaften zurückgegeben werden sollen.

Rückgabewert

Ein Array von Zeichenfolgen, das den Eigenschaften entspricht, die direkt im angegebenen Objekt gefunden werden.

Beschreibung

Object.getOwnPropertyNames() gibt ein Array zurück, dessen Elemente Strings sind, die den aufzählbaren und nicht-auflistbaren Eigenschaften entsprechen, die direkt in einem gegebenen Objekt obj gefunden werden. Die Reihenfolge der aufzählbaren Eigenschaften im Array ist konsistent mit der Reihenfolge, die durch eine for...in-Schleife (oder durch Object.keys()) über die Eigenschaften des Objekts exponiert wird. Die nicht-negativen Integer-Schlüssel des Objekts (sowohl aufzählbar als auch nicht-auflistbar) werden zuerst in aufsteigender Reihenfolge dem Array hinzugefügt, gefolgt von den String-Schlüsseln in der Reihenfolge der Einfügung.

In ES5 verursacht ein Argument, das kein Objekt ist (ein primitiver Wert), einen TypeError. In ES2015 wird ein Nicht-Objekt-Argument in ein Objekt umgewandelt.

js
Object.getOwnPropertyNames("foo");
// TypeError: "foo" is not an object (ES5 code)

Object.getOwnPropertyNames("foo");
// ["0", "1", "2", "length"]  (ES2015 code)

Beispiele

Verwendung von Object.getOwnPropertyNames()

js
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"]

Wenn Sie nur die aufzählbaren Eigenschaften wünschen, siehe Object.keys() oder verwenden Sie eine for...in-Schleife (beachten Sie, dass dies auch die aufzählbaren Eigenschaften zurückgibt, die in der Prototypenkette des Objekts gefunden werden, es sei denn, diese wird mit Object.hasOwn() gefiltert).

Elemente in der Prototypenkette werden nicht aufgelistet:

js
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"]

Nur nicht-auflistbare Eigenschaften erhalten

Dies verwendet die Funktion Array.prototype.filter(), um die aufzählbaren Schlüssel (erhalten mit Object.keys()) von einer Liste aller Schlüssel (erhalten mit Object.getOwnPropertyNames()) zu entfernen, wodurch nur die nicht-auflistbaren Schlüssel als Ausgabe bleiben.

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

Spezifikationen

Specification
ECMAScript® 2025 Language Specification
# sec-object.getownpropertynames

Browser-Kompatibilität

Siehe auch