Signatur
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
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.