Einfachste Möglichkeit, mit CoffeeScript zu überprüfen, ob ein Schlüssel im Objekt vorhanden ist

110

Was ist in CoffeeScript der einfachste Weg, um zu überprüfen, ob ein Schlüssel in einem Objekt vorhanden ist?

Ajsie
quelle

Antworten:

182
key of obj

Dies wird zu JavaScript kompiliert key in obj. (CoffeeScript wird verwendet, ofwenn auf Schlüssel verwiesen wird und inwenn auf Array-Werte verwiesen wird: val in arrTestet, ob valin arr. Ist .)

Die Antwort von thejh ist richtig, wenn Sie den Prototyp des Objekts ignorieren möchten. Jimmys Antwort ist richtig, wenn Sie Schlüssel mit einem nulloder undefinedWert ignorieren möchten .

Trevor Burnham
quelle
2
own key of objfunktioniert höchstwahrscheinlich auch, um zusätzlich zu testen .hasOwnProperty(). Das "wahrscheinlichste" kommt von mir, dass ich es nicht versucht habe, aber diese Syntax funktioniert im Verständnis.
fliegende Schafe
2
@flyingsheep Nein, es funktioniert nur im Verständnis. Probieren Sie es aus: coffeescript.org/#try:own%20key%20of%20obj
Trevor Burnham
ah, ok :own = (prop, obj) -> Object::hasOwnProperty.call obj, prop
fliegende Schafe
36

Das '?' Bediener prüft auf Existenz:

if obj?
    # object is not undefined or null

if obj.key?
    # obj.key is not undefined or null

# call function if it exists
obj.funcKey?()

# chain existence checks, returns undefined if failure at any level
grandChildVal = obj.key?.childKey?.grandChildKey

# chain existence checks with function, returns undefined if failure at any level
grandChildVal = obj.key?.childKey?().grandChildKey
Limscoder
quelle
16
Dies schlägt fehl, wenn der Schlüssel vorhanden ist, aber den Wert von hat null.
Mu ist zu kurz
In dem Fall, in dem man sich nicht darum kümmert, ob der Schlüssel vorhanden ist, sondern null ist, obj.key?ist dies wahrscheinlich der prägnanteste.
Andrew Mao
21
obj.hasOwnProperty(name)

(um geerbte Eigenschaften zu ignorieren)

thejh
quelle
Ich mag diese Antwort, weil key of objsie einen Fehler auslöst , wenn der Wert eine Zeichenfolge oder eine Zahl ist. Cannot use 'in' operator to search. In diesem Fall funktioniert es, wenn das Objekt nicht undefiniert und nicht null ist.
Jqualls
Dies schlägt fehl, wenn das Objekt den Wert seines Prototyps hat.
Brian M. Hunt