Dieser Inhalt wurde automatisch aus dem Englischen übersetzt, und kann Fehler enthalten.Erfahre mehr über dieses Experiment.
Object.prototype.hasOwnProperty()
Baseline Widely available
This feature is well established and works across many devices and browser versions. It’s been available across browsers since Juli 2015.
DiehasOwnProperty()-Methode vonObject Instanzen gibt einen booleschen Wert zurück, der angibt, ob diesesObjekt die angegebene Eigenschaft als eigene Eigenschaft hat (im Gegensatz zum Vererben).
Hinweis:Object.hasOwn() wird überhasOwnProperty() empfohlen, in Browsern, die es unterstützen.
In diesem Artikel
Probieren Sie es aus
const object = {};object.foo = 42;console.log(object.hasOwnProperty("foo"));// Expected output: trueconsole.log(object.hasOwnProperty("toString"));// Expected output: falseconsole.log(object.hasOwnProperty("hasOwnProperty"));// Expected output: falseSyntax
hasOwnProperty(prop)Parameter
Rückgabewert
Gibttrue zurück, wenn das Objekt die angegebene Eigenschaft als eigene Eigenschaft hat; andernfallsfalse.
Beschreibung
DiehasOwnProperty()-Methode gibttrue zurück, wenn die angegebene Eigenschaft einedirekte Eigenschaft des Objekts ist — selbst wenn der Wertnull oderundefined ist. DieMethode gibtfalse zurück, wenn die Eigenschaft vererbt wurde oder überhaupt nicht deklariert wurde. Im Gegensatz zumin Operator prüft dieseMethode nicht die angegebene Eigenschaft in der Prototypen-Kette des Objekts.
Die Methode kann aufden meisten JavaScript-Objekten aufgerufen werden, da die meisten ObjektevonObject abstammen und daher dessen Methoden erben. ZumBeispiel istArray einObject, sodass Sie diehasOwnProperty()-Methode verwenden können, um zu prüfen, ob ein Index existiert:
const fruits = ["Apple", "Banana", "Watermelon", "Orange"];fruits.hasOwnProperty(3); // true ('Orange')fruits.hasOwnProperty(4); // false - not definedDie Methode ist nicht verfügbar in Objekten, in denen sie neu implementiert wird, oder beinull-Prototyp-Objekten (da diese nicht vonObject.prototype erben). Beispiele für diese Fälle sind unten angegeben.
Beispiele
>Verwenden von hasOwnProperty, um das Vorhandensein einer eigenen Eigenschaft zu testen
Der folgende Code zeigt, wie ermittelt werden kann, ob dasexample-Objekt eine Eigenschaft mit dem Namenprop enthält.
const example = {};example.hasOwnProperty("prop"); // falseexample.prop = "exists";example.hasOwnProperty("prop"); // true - 'prop' has been definedexample.prop = null;example.hasOwnProperty("prop"); // true - own property exists with value of nullexample.prop = undefined;example.hasOwnProperty("prop"); // true - own property exists with value of undefinedDirekte vs. vererbte Eigenschaften
Das folgende Beispiel unterscheidet zwischen direkten Eigenschaften und Eigenschaften, die über die Prototypen-Kette vererbt wurden:
const example = {};example.prop = "exists";// `hasOwnProperty` will only return true for direct properties:example.hasOwnProperty("prop"); // trueexample.hasOwnProperty("toString"); // falseexample.hasOwnProperty("hasOwnProperty"); // false// The `in` operator will return true for direct or inherited properties:"prop" in example; // true"toString" in example; // true"hasOwnProperty" in example; // trueIteration über die Eigenschaften eines Objekts
Das folgende Beispiel zeigt, wie über die aufzählbaren Eigenschaften einesObjekts iteriert werden kann ohne vererbte Eigenschaften auszuführen.
const buz = { fog: "stack",};for (const name in buz) { if (buz.hasOwnProperty(name)) { console.log(`this is fog (${name}) for sure. Value: ${buz[name]}`); } else { console.log(name); // toString or something else }}Beachten Sie, dass diefor...in-Schleifenur über aufzählbare Elemente iteriert: das Fehlen von nicht-auflistbaren Eigenschaften, die aus der Schleife ausgegeben werden,impliziert nicht, dasshasOwnProperty selbst strengauf aufzählbare Elemente beschränkt ist. Sie können über nicht-auflistbare Eigenschaften mitObject.getOwnPropertyNames() iterieren.
Verwenden von hasOwnProperty als Eigenschaftsname
JavaScript schützt den EigenschaftsnamenhasOwnProperty nicht; ein Objekt, daseine Eigenschaft mit diesem Namen hat, kann falsche Ergebnisse zurückgeben:
const foo = { hasOwnProperty() { return false; }, bar: "Here be dragons",};foo.hasOwnProperty("bar"); // re-implementation always returns falseDie empfohlene Methode, um dieses Problem zu überwinden, ist die Verwendung vonObject.hasOwn() (in unterstützenden Browsern). AndereAlternativen beinhalten die Verwendung einesexternenhasOwnProperty:
const foo = { bar: "Here be dragons" };// Use Object.hasOwn() method - recommendedObject.hasOwn(foo, "bar"); // true// Use the hasOwnProperty property from the Object prototypeObject.prototype.hasOwnProperty.call(foo, "bar"); // true// Use another Object's hasOwnProperty// and call it with 'this' set to foo({}).hasOwnProperty.call(foo, "bar"); // trueBeachten Sie, dass in den ersten beiden Fällen keine neuen Objekte erstellt werden.
Objekte erstellt mit Object.create(null)
null-Prototyp-Objekte erben nicht vonObject.prototype, washasOwnProperty() unzugänglich macht.
const foo = Object.create(null);foo.prop = "exists";foo.hasOwnProperty("prop"); // Uncaught TypeError: foo.hasOwnProperty is not a functionDie Lösungen in diesem Fall sind dieselben wie im vorherigen Abschnitt: Verwenden SieObject.hasOwn() bevorzugt, andernfalls verwenden Sie dashasOwnProperty() eines externen Objekts.
Spezifikationen
| Specification |
|---|
| ECMAScript® 2026 Language Specification> # sec-object.prototype.hasownproperty> |