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.