Object.hasOwn()

Baseline Widely available

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

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

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

Probieren Sie es aus

const object1 = {
  prop: "exists",
};

console.log(Object.hasOwn(object1, "prop"));
// Expected output: true

console.log(Object.hasOwn(object1, "toString"));
// Expected output: false

console.log(Object.hasOwn(object1, "undeclaredPropertyValue"));
// Expected output: false

Syntax

js
Object.hasOwn(obj, prop)

Parameter

obj

Die JavaScript-Objektinstanz, die getestet werden soll.

prop

Der String-Name oder Symbol der zu testenden Eigenschaft.

Rückgabewert

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

Beschreibung

Die Methode Object.hasOwn() gibt true zurück, wenn die angegebene Eigenschaft eine direkte Eigenschaft des Objekts ist — selbst wenn der Eigenschaftswert null oder undefined ist. Die Methode gibt false zurück, wenn die Eigenschaft geerbt ist oder überhaupt nicht erklärt wurde. Im Gegensatz zum in-Operator wird bei dieser Methode nicht nach der angegebenen Eigenschaft in der Prototypenkette des Objekts gesucht.

Es wird empfohlen, Object.prototype.hasOwnProperty() zu verwenden, da es sowohl mit null-Prototyp-Objekten als auch mit Objekten funktioniert, die die geerbte hasOwnProperty() Methode überschrieben haben. Während es möglich ist, diese Probleme zu umgehen, indem Object.prototype.hasOwnProperty() auf einem anderen Objekt aufgerufen wird (wie Object.prototype.hasOwnProperty.call(obj, prop)), ist Object.hasOwn() intuitiver und kürzer.

Beispiele

Verwendung von Object.hasOwn() zur Prüfung auf das Vorhandensein einer Eigenschaft

Der folgende Code zeigt, wie ermittelt werden kann, ob das example-Objekt eine Eigenschaft namens prop enthält.

js
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

Das folgende Beispiel unterscheidet zwischen direkten Eigenschaften und Eigenschaften, die über die Prototypenkette vererbt wurden:

js
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

Iteration über die Eigenschaften eines Objekts

Um über die aufzählbaren Eigenschaften eines Objekts zu iterieren, sollten Sie verwenden:

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

Wenn Sie jedoch for...in verwenden müssen, können Sie Object.hasOwn() verwenden, um die geerbten Eigenschaften zu überspringen:

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

Überprüfung, ob ein Array-Index existiert

Die Elemente eines Array sind als direkte Eigenschaften definiert, daher können Sie die hasOwn() Methode verwenden, um zu überprüfen, ob ein bestimmter Index existiert:

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

Dieser Abschnitt zeigt, dass Object.hasOwn() gegenüber den Problemen immun ist, die hasOwnProperty() betreffen. Erstens kann es mit Objekten verwendet werden, die hasOwnProperty() neu implementiert haben. Im unten stehenden Beispiel meldet die neu implementierte hasOwnProperty() Methode für jede Eigenschaft false, aber das Verhalten von Object.hasOwn() bleibt unberührt:

js
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

Es kann auch mit null-Prototyp-Objekten verwendet werden. Diese erben nicht von Object.prototype, daher ist hasOwnProperty() nicht zugänglich.

js
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

Spezifikationen

Specification
ECMAScript® 2026 Language Specification
# sec-object.hasown

Browser-Kompatibilität

Siehe auch