2011-11-23 13 views

risposta

176
key of obj 

questo viene compilato in di key in obj JavaScript. (CoffeeScript usa of quando si parla di chiavi, e in quando si parla di valori di matrice: val in arr metterà alla prova se val è in arr.) Risposta

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

+2

molto probabilmente 'own key of obj' funziona anche per testare ad esempio' .hasOwnProperty() '. il "più probabile" viene da me non aver provato, ma questa sintassi funziona in comprensione. –

+2

@flyingsheep No, funziona solo in termini di comprensione. Provalo: http://coffeescript.org/#try:own%20key%20of%20obj –

+0

ah, [ok] (https://github.com/jashkenas/coffee-script/issues/1019): 'own = (prop, obj) -> Object :: hasOwnProperty.call obj, prop' –

20
obj.hasOwnProperty(name) 

+0

Mi piace questa risposta perché "chiave di obj" genererà un errore se il valore è una stringa o un numero. 'Impossibile usare 'in' operatore per cercare. In questo caso se l'oggetto non è indefinito e non nullo funzionerà. – jqualls

+0

Non riesce dove l'oggetto ha il valore dal suo prototipo. –

32

Il "?" operatore controlla per 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 fallisce se la chiave è presente ma ha un valore di 'null'. –

+0

@muistooshort Beh, questo è fastidioso .. –

+0

Nel caso in cui uno non si preoccupi della chiave esistente ma essendo nullo, quindi 'obj.key? 'È probabilmente il più conciso. –

Problemi correlati