Und natürlich möchte ich dies codeweise tun. Es ist nicht so, dass es keine Alternative zu diesem Problem gibt, mit dem ich konfrontiert bin, nur neugierig.
Im Javascript. Wie kann ich feststellen, ob ein Feld in einem Objekt vorhanden ist?
Khoi
Dadurch werden Attribute ignoriert, die durch die Prototypenkette weitergegeben werden.
if(obj.hasOwnProperty('field'))
{
// Do something
}
Peter Kruithof
AKTUALISIEREN: Verwenden Sie die hasOwnProperty
Methode, wie Gary Chambers vorschlägt. Die folgende Lösung wird funktionieren, wird jedoch als bewährte Methode angesehen hasOwnProperty
.
if ('field' in obj) {
}
-
Beachten Sie, dass Sie auf die gleiche Weise das Vorhandensein eines Schlüssels in einem assoziativen Array überprüfen können (das liegt daran, dass normalerweise objects sind tatsächlich assoziative Arrays)
– Andrea Zilio
13. August 2010 um 11:21 Uhr
-
Einige Linters werden sich über diese Syntax beschweren. Es ist sicherer, hasOwnProperty zu verwenden, wie von @GaryChambers vorgeschlagen
– Jayd
2. Juni 2014 um 14:11 Uhr
-
Einverstanden, ich habe meine Antwort aktualisiert, um andere Leute in die richtige Richtung zu weisen.
– Peter Kruithof
2. Juni 2014 um 15:23 Uhr
-
@Jayd Was sind die Nachteile dieser Syntax im Vergleich zu hasOwnProperty?
– Jo Smo
11. Dezember 2015 um 17:18 Uhr
-
@JoSmo die in-Syntax könnte true für Attribute in der Prototypkette zurückgeben, wie Gary Chambers in seiner Antwort erwähnte. Hat eigene Eigenschaft wird nur nach Feldern suchen, die für das aktuelle Objekt endemisch sind.
– Jayd
7. Januar 2016 um 8:56 Uhr
Zusätzlich zu den oben genannten Möglichkeiten können Sie Folgendes verwenden:
if(obj.myProperty !== undefined) {
}
-
Diese Methode kann nicht zwischen fehlendem Feld und vorhandenem Feld mit undefiniertem Wert unterscheiden. Zum Beispiel:
{}
und{a : undefined}
– Arashsoft
11. April 2018 um 16:47 Uhr
-
@Arashsoft hast du einen Anwendungsfall gefunden, bei dem diese beiden Situationen einen wesentlichen Unterschied verursachen? Zum Beispiel, dass ein Test fehlschlägt oder etwas in der Benutzeroberfläche nicht richtig gerendert wird?
– Jason
1. Oktober 2021 um 22:11 Uhr
-
@Jason Das ist nicht der Punkt. Der Punkt ist, dass Sie damit nicht prüfen können, ob ein Feld in einem Objekt vorhanden ist.
– Osterfest
25. Dezember 2021 um 4:55 Uhr
Es gibt hat Methode in der Lodash-Bibliothek dafür. Es kann sogar nach verschachtelten Feldern suchen.
_.has(object, 'a');
_.has(object, 'a.b');