Dieser Inhalt wurde automatisch aus dem Englischen übersetzt, und kann Fehler enthalten. Erfahre mehr über dieses Experiment.

View in English Always switch to English

Object.getOwnPropertyNames()

Baseline
Weitgehend verfügbar

Diese Funktion ist gut etabliert und funktioniert auf vielen Geräten und in vielen Browserversionen. Sie ist seit Juli 2015 browserübergreifend verfügbar.

Die statische Methode Object.getOwnPropertyNames() gibt ein Array aller Eigenschaften zurück, die direkt auf einem gegebenen Objekt vorhanden sind. Dazu gehören auch nicht aufzählbare Eigenschaften, jedoch keine Eigenschaften mit Symbol-Schlüsseln.

Probieren Sie es aus

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

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

Syntax

js
Object.getOwnPropertyNames(obj)

Parameter

obj

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

Rückgabewert

Ein Array von Zeichenfolgen, die den direkt auf dem gegebenen Objekt vorhandenen Eigenschaften entsprechen.

Beschreibung

Object.getOwnPropertyNames() gibt ein Array zurück, dessen Elemente Zeichenfolgen sind, die den aufzählbaren und nicht aufzählbaren Eigenschaften entsprechen, die direkt auf einem gegebenen Objekt obj vorhanden sind. Die Reihenfolge der aufzählbaren Eigenschaften im Array entspricht der Reihenfolge, in der eine for...in-Schleife (oder Object.keys()) die Eigenschaften des Objekts liefert. Die nicht negativen ganzzahligen Schlüssel des Objekts (sowohl aufzählbare als auch nicht aufzählbare) werden zuerst in aufsteigender Reihenfolge zum Array hinzugefügt, gefolgt von den Zeichenfolgenschlüsseln in der Reihenfolge ihrer Einfügung.

In ES5 führt ein Argument, das kein Objekt ist (ein primitiver Wert), bei dieser Methode zu einem TypeError. In ES2015 wird ein Argument, das kein Objekt ist, 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

Object.getOwnPropertyNames() verwenden

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 benötigen, verwenden Sie Object.keys() oder eine for...in-Schleife. Beachten Sie, dass die Schleife auch aufzählbare Eigenschaften aus der Prototypenkette des Objekts liefert, sofern Sie diese nicht mit Object.hasOwn() herausfiltern.

Eigenschaften aus 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 aufzählbare Eigenschaften ermitteln

Hier wird die Funktion Array.prototype.filter() verwendet, um die aufzählbaren Schlüssel (ermittelt mit Object.keys()) aus einer Liste aller Schlüssel (ermittelt mit Object.getOwnPropertyNames()) zu entfernen. So bleiben nur die nicht aufzählbaren Schlüssel übrig.

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

Spezifikation
ECMAScript® 2027 Language Specification
# sec-object.getownpropertynames

Browser-Kompatibilität

Siehe auch