2014-04-29 13 views
6

nel mio codice JavaScript e in Chrome strumenti di sviluppo scrivo:A = b || "Foo"; lamenta che "b" non è definito e non assegna a "foo". Cosa mi manca?

a = b || "foo"; 

e ottenere questo errore:

ReferenceError: b is not defined 

E un non è impostato su "foo". So che questo è un modello valido in JavaScript. Cosa mi manca?

+2

"Non ho avuto abbastanza caffè?" Come possiamo sapere ... hai una tale sensazione? Che bevi ancora un po '. – nicael

+0

'var a = window.b || "foo"; '.. se' b' è una variabile globale .. –

+0

@Mr_Green E se la variabile è in un altro ambito? –

risposta

10

Questo è non uno schema valido in JavaScript. È valido solo in un contesto in cui esiste b, ad esempio

function test(b) { 
    var a = b || "foo"; 
}; 
+0

Accidenti, eri più veloce di me! – A1rPun

+0

Grazie. Ha senso. A differenza di me! –

12

Il modello è OK se il valore di b è undefined.

Se la variabileb non potrebbe essere definito, è un error per cercare di leggerlo quindi è un po 'più complicato:

a = typeof b!=="undefined" ? b : "foo"; 

stare attenti con b||something anche quando si conosce la variabile è definita (che è il caso più comune): molto spesso si desidera fornire un valore predefinito per sostituire undefined, non impedire al chiamante di passare 0 o "" quindi è solitamente più sicuro fare b!==undefined ? b : "foo".

+0

I miei voti esauriti, altrimenti avrei svalutato solo questo :( – thefourtheye

+0

@thefourtheye Guess, che lo farai allora? – nicael

+0

@thefourtheye Cosa? Puoi esaurire i tuoi voti? –

Problemi correlati