Get to know MDN better
Dieser Inhalt wurde automatisch aus dem Englischen übersetzt, und kann Fehler enthalten. Erfahre mehr über dieses Experiment.
Diese Funktion ist gut etabliert und funktioniert auf vielen Geräten und in vielen Browserversionen. Sie ist seit Juli 2015 browserübergreifend verfügbar.
Der in Operator gibt true zurück, wenn die angegebene Eigenschaft im angegebenen Objekt oder in dessen Prototypenkette vorhanden ist.
Der in Operator kann nicht verwendet werden, um nach Werten in anderen Sammlungen zu suchen. Um zu testen, ob ein bestimmter Wert in einem Array existiert, verwenden Sie Array.prototype.includes(). Für Sets verwenden Sie Set.prototype.has().
Ein String oder Symbol, das einen Eigenschaftsnamen darstellt (nicht-Symbole werden zu Strings konvertiert). Kann auch ein privater Element-Identifikator sein.
objectObjekt, das überprüft werden soll, ob es (oder seine Prototypenkette) die Eigenschaft mit dem angegebenen Namen (prop) enthält.
Wird ausgelöst, wenn object kein Objekt ist (d.h. ein primitiver Wert).
Der in Operator prüft, ob eine String- oder Symbol-Eigenschaft in einem Objekt oder in dessen Prototypenkette vorhanden ist. Wenn Sie nur nicht-vererbte Eigenschaften prüfen möchten, verwenden Sie Object.hasOwn() stattdessen.
Eine Eigenschaft kann in einem Objekt vorhanden sein, aber den Wert undefined haben. Daher ist "x" in obj nicht dasselbe wie obj.x !== undefined. Um in dazu zu bringen, false zurückzugeben, nachdem eine Eigenschaft hinzugefügt wurde, verwenden Sie den delete Operator anstelle davon, den Wert dieser Eigenschaft auf undefined zu setzen.
Sie können auch den in Operator verwenden, um zu überprüfen, ob ein bestimmtes privates Klassenfeld oder Methode in einem Objekt definiert wurde. Der Operator gibt true zurück, wenn die Eigenschaft definiert ist, und false andernfalls. Dies wird als branding-Prüfung bezeichnet, da sie true zurückgibt, wenn und nur wenn das Objekt mit diesem Klassenkonstruktor erstellt wurde, wonach Sie sicher auf andere private Elemente zugreifen können.
Dies ist eine spezielle Syntax — die linke Seite des in Operators ist ein Eigenschaftsidentifikator anstelle eines Ausdrucks, aber unzitiert (da es sonst eine String-Eigenschaft und kein privates Element wäre).
Da auf private Elemente in Objekten, die nicht mit der aktuellen Klasse verwandt sind, ein TypeError geworfen wird, anstelle von undefined zurückgegeben wird, ermöglicht diese Syntax Ihnen, zu verkürzen:
Zu:
Es vermeidet im Allgemeinen auch die Notwendigkeit, mit der Fehlerbehandlung umzugehen, nur um auf ein möglicherweise nicht existentes privates Element zuzugreifen.
Der in Operator erfordert jedoch immer noch, dass das private Element vorher in der umgebenden Klasse deklariert wird — andernfalls würde er einen SyntaxError werfen ("Privates Feld '#x' muss in einer umgebenden Klasse deklariert werden"), derselbe wie wenn Sie versuchen, auf ein nicht deklariertes privates Element zuzugreifen.
Die folgenden Beispiele zeigen einige Verwendungen des in Operators.
Sie müssen ein Objekt auf der rechten Seite des in Operators angeben. Zum Beispiel können Sie eine Zeichenfolge angeben, die mit dem String Konstruktor erstellt wurde, aber Sie können keine Zeichenfolgenliterale angeben.
Wenn Sie eine Eigenschaft mit dem delete Operator löschen, gibt der in Operator für diese Eigenschaft false zurück.
Wenn Sie eine Eigenschaft auf undefined setzen, sie jedoch nicht löschen, gibt der in Operator für diese Eigenschaft true zurück.
Der in Operator wird false für leere Array-Slots zurückgeben, auch wenn der direkte Zugriff darauf undefined zurückgibt.
Um dies zu vermeiden, stellen Sie sicher, dass ein neues Array immer mit nicht-leeren Werten gefüllt wird oder nicht auf Indizes hinter dem Ende des Arrays geschrieben wird.
Der in Operator gibt true für Eigenschaften in der Prototypenkette zurück. Dies kann unerwünscht sein, wenn Sie Objekte verwenden, um beliebige Schlüssel-Wert-Paare zu speichern.
Sie können Object.hasOwn() verwenden, um zu prüfen, ob das Objekt den Schlüssel hat.
Alternativ sollten Sie erwägen, ein Null-Prototyp-Objekt oder eine Map zum Speichern von ages zu verwenden, um andere Fehler zu vermeiden.
Der folgende Code-Ausschnitt demonstriert eine statische Funktion, die angibt, ob ein Objekt mit dem Person Konstruktor erstellt wurde und daher andere Methoden sicher ausführen kann.
Es hilft, den folgenden Fall zu verhindern:
Ohne den in Operator müssten Sie einen try...catch Block verwenden, um zu prüfen, ob das Objekt das private Element hat.
Sie können dies auch als eine [Symbol.hasInstance]() Methode der Klasse implementieren, sodass Sie den instanceof Operator verwenden können, um dieselbe Prüfung durchzuführen (die standardmäßig nur auf die Existenz von Person.prototype in der Prototypenkette des Objekts prüft).
Für weitere Beispiele siehe Private Elemente und den Klassenguide.
| ECMAScript® 2027 Language Specification # sec-relational-operators |
JavaScript aktivieren, um diese Browser-Kompatibilitätstabelle anzuzeigen.
Der Bauplan für ein besseres Internet.
Besuche die gemeinnützige Muttergesellschaft der Mozilla Corporation, die Mozilla Foundation.
Teile dieses Inhalts sind ©1998–2026 von einzelnen mozilla.org-Mitwirkenden. Inhalte sind verfügbar unter einer Creative-Commons-Lizenz.