In Javascript. Wie kann ich feststellen, ob ein Feld in einem Objekt vorhanden ist?

74

Und natürlich möchte ich dies codeweise tun. Es ist nicht so, dass es keine Alternative zu diesem Problem gibt, nur neugierig.

Khoi
quelle

Antworten:

76

UPDATE : Verwenden Sie die hasOwnPropertyMethode, wie Gary Chambers vorschlägt. Die folgende Lösung funktioniert, wird jedoch als bewährte Methode angesehen hasOwnProperty.

if ('field' in obj) {
}
Peter Kruithof
quelle
1
Beachten Sie, dass genau die gleiche Art und Weise Sie die Existenz eines Schlüssels in einem assoziativen Array überprüfen (dies ist in der Regel , weil Objekte sind in der Tat assoziative Arrays)
Andrea Zilio
Einige Linters werden sich über diese Syntax beschweren. Es ist sicherer, hasOwnProperty zu verwenden, wie von @GaryChambers
Jayd
Einverstanden habe ich meine Antwort aktualisiert, um andere Menschen in die richtige Richtung zu weisen.
Peter Kruithof
@ Jayd Was sind die Nachteile dieser Syntax im Vergleich zu hasOwnProperty?
Jo Smo
2
@JoSmo Die In-Syntax könnte für Attribute in der Prototypenkette true zurückgeben, wie Gary Chambers in seiner Antwort erwähnt hat. Hat eine eigene Eigenschaft und sucht nur nach Feldern, die für das aktuelle Objekt endemisch sind.
Jayd
114

Dadurch werden Attribute ignoriert, die über die Prototypenkette weitergegeben werden.

if(obj.hasOwnProperty('field'))
{
    // Do something
}
Gary Chambers
quelle
1

Darüber hinaus können Sie folgende Methoden verwenden:

if(obj.myProperty !== undefined) {
}
Eugene Ilyushin
quelle
4
Diese Methode kann nicht zwischen fehlendem Feld und vorhandenem Feld mit undefiniertem Wert unterscheiden. Zum Beispiel: {}und{a : undefined}
Arashsoft
1

Nach viel Frust beim Versuch, einen Feldnamen zu testen, der über eine Variable übergeben wird, kam ich auf Folgendes:

`function isset(fName){ 
    try{
        document.getElementById(fName).value=document.getElementById(fName).value;  
        return true;
    }catch(err){
        return false;
    }
 }

`

Die Funktion verwendet die Try / Catch-Funktion von Javascript. Wenn der Feldwert nicht festgelegt werden kann, wird ein Fehler ausgelöst, der abgefangen und als false zurückgegeben wird. Andernfalls wird true zurückgegeben.

werden
quelle
0

Hierfür gibt es in der lodash-Bibliothek eine Methode. Es kann sogar nach verschachtelten Feldern suchen.

_.has(object, 'a');     
_.has(object, 'a.b');
Aliaksandr Sushkevich
quelle