Il modo più semplice per verificare se la chiave esiste nell'oggetto utilizzando CoffeeScript


110

In CoffeeScript, qual è il modo più semplice per verificare se una chiave esiste in un oggetto?

Risposte:


182
key of obj

Questo compila in JavaScript key in obj. (CoffeeScript utilizza ofquando si fa riferimento alle chiavi e inquando si fa riferimento a valori di array: val in arrverificherà se valè in arr.)

La risposta di thejh è corretta se si desidera ignorare il prototipo dell'oggetto. La risposta di Jimmy è corretta se vuoi ignorare le chiavi con un valore nullo undefined.


2
molto probabilmente own key of objfunziona anche per testare .hasOwnProperty(). il "più probabile" viene da me che non ho provato, ma questa sintassi funziona nelle comprensioni.
pecore volanti il

2
@flyingsheep No, funziona solo nella comprensione. Provalo: coffeescript.org/#try:own%20key%20of%20obj
Trevor Burnham

ah, ok :own = (prop, obj) -> Object::hasOwnProperty.call obj, prop
pecora volante

36

Il '?' l'operatore verifica l'esistenza:

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

16
Questo non riesce se la chiave è presente ma ha un valore di null.
mu è troppo breve

Nel caso in cui non ci si preoccupi della chiave esistente ma sia nulla, allora obj.key?è probabilmente la più concisa.
Andrew Mao

21
obj.hasOwnProperty(name)

(per ignorare le proprietà ereditate)


Mi piace questa risposta perché key of objgenererà un errore se il valore è una stringa o un numero. Cannot use 'in' operator to search. In questo caso, se l'oggetto non è indefinito e non è nullo, funzionerà.
jqualls

Ciò non riesce dove l'oggetto ha il valore dal suo prototipo.
Brian M. Hunt,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.