Start · Sprachen · JavaScript · Referenz · Object.hasOwn()

Object.hasOwn()

Methode

Die statische Methode <code>Object.hasOwn()</code> gibt <code>true</code> zurück, wenn das angegebene Objekt die genannte Eigenschaft als eigene Eigenschaft besitzt.

Kategorie: method-property

Signatur

Object.hasOwn(obj, prop)

Beschreibung

Die statische Methode Object.hasOwn() gibt true zurück, wenn das angegebene Objekt die genannte Eigenschaft als seine eigene Eigenschaft besitzt. Wenn die Eigenschaft geerbt ist oder nicht existiert, gibt die Methode false zurück.

Hinweis: Object.hasOwn() ist als Ersatz für Object.prototype.hasOwnProperty() gedacht.

Die Methode Object.hasOwn() gibt true zurück, wenn die angegebene Eigenschaft eine direkte Eigenschaft des Objekts ist — auch wenn der Wert der Eigenschaft null oder undefined ist. Die Methode gibt false zurück, wenn die Eigenschaft geerbt ist oder überhaupt nicht deklariert wurde. Im Gegensatz zum in-Operator prüft diese Methode nicht die prototype chain des Objekts auf die angegebene Eigenschaft.

Sie wird gegenüber Object.prototype.hasOwnProperty() empfohlen, weil sie für null-Prototype-Objekte funktioniert und mit Objekten, die die geerbte hasOwnProperty()-Methode überschrieben haben. Zwar ist es möglich, diese Probleme zu umgehen, indem man Object.prototype.hasOwnProperty() über ein anderes Objekt aufruft (etwa Object.prototype.hasOwnProperty.call(obj, prop)), doch Object.hasOwn() ist intuitiver und prägnanter.

Parameter

Name Typ Default Beschreibung
$obj Pflicht Object Die JavaScript-Objektinstanz, die getestet werden soll.
$prop Pflicht string | Symbol Der String-Name oder das Symbol der zu testenden Eigenschaft.

Rückgabewert

Typ
boolean
Beschreibung
true, wenn das angegebene Objekt die angegebene Eigenschaft direkt definiert hat. Andernfalls false.

Beispiele

Object.hasOwn() zum Testen der Existenz einer Eigenschaft verwenden

const example = {};
Object.hasOwn(example, "prop"); // false - 'prop' has not been defined

example.prop = "exists";
Object.hasOwn(example, "prop"); // true - 'prop' has been defined

example.prop = null;
Object.hasOwn(example, "prop"); // true - own property exists with value of null

example.prop = undefined;
Object.hasOwn(example, "prop"); // true - own property exists with value of undefined

Direkte vs. geerbte Eigenschaften

const example = {};
example.prop = "exists";

// `hasOwn` will only return true for direct properties:
Object.hasOwn(example, "prop"); // true
Object.hasOwn(example, "toString"); // false
Object.hasOwn(example, "hasOwnProperty"); // false

// The `in` operator will return true for direct or inherited properties:
"prop" in example; // true
"toString" in example; // true
"hasOwnProperty" in example; // true

Über die Eigenschaften eines Objekts iterieren

const example = { foo: true, bar: true };
for (const name of Object.keys(example)) {
  // …
}

for...in mit Object.hasOwn()

const example = { foo: true, bar: true };
for (const name in example) {
  if (Object.hasOwn(example, name)) {
    // …
  }
}

Prüfen, ob ein Array-Index existiert

const fruits = ["Apple", "Banana", "Watermelon", "Orange"];
Object.hasOwn(fruits, 3); // true ('Orange')
Object.hasOwn(fruits, 4); // false - not defined

Problematische Fälle für hasOwnProperty() — überschriebene Methode

const foo = {
  hasOwnProperty() {
    return false;
  },
  bar: "The dragons be out of office",
};

console.log(foo.hasOwnProperty("bar")); // false

console.log(Object.hasOwn(foo, "bar")); // true

Verwendung mit null-Prototype-Objekten

const foo = Object.create(null);
foo.prop = "exists";

console.log(foo.hasOwnProperty("prop"));
// Uncaught TypeError: foo.hasOwnProperty is not a function

console.log(Object.hasOwn(foo, "prop")); // true

// Wichtig · Fallstricke

Object.hasOwn() ist als Ersatz für Object.prototype.hasOwnProperty() gedacht und funktioniert auch mit null-Prototype-Objekten sowie mit Objekten, die hasOwnProperty() überschrieben haben.