Oggi mi sono imbattuto in uno strano comportamento in Javascript. Di seguito è il codiceJavascript: comportamento strano `stringa vuota` AND` false` restituisce stringa vuota
return "" && false
restituisce "".
Perché si comporta così?
Oggi mi sono imbattuto in uno strano comportamento in Javascript. Di seguito è il codiceJavascript: comportamento strano `stringa vuota` AND` false` restituisce stringa vuota
return "" && false
restituisce "".
Perché si comporta così?
Poiché
La LogicalANDExpression produzione: LogicalANDExpression & & BitwiseORExpression è valutata come segue:
- Sia Lref essere il risultato della valutazione LogicalANDExpression.
- Lasciare lval essere GetValue (lref).
- Se ToBoolean (lval) è false, restituisce lval.
- Lasciare che rref sia il risultato della valutazione di BitwiseORExpression.
- Restituire GetValue (rref).
Questo significa:
ritorno il primo valore se è falsy, restituire il secondo valore se il primo è truthy.
Questo è anche il comportamento visto se si fa:
return false && true
Si ottiene false
.
questo significa anche che questo
return 23 && "Hello"
darebbe "Ciao"
voglio solo aggiungere che a causa di tale comportamento è possibile assegnare facilmente il valore predefinito al parametro funzione nel caso in cui non è stato passato, come questo: '' 'function setName (name) {name = name || "nome predefinito"; } '' ' – tytyryty
@tytyryty Mentre questo è naturalmente possibile, ES6 ci fornisce un modo molto più semplice per farlo:' function setName (name = "default name") {... '. Ma per i non-ES6 hai ragione, ovviamente. – idmean
buon punto, @idmean, grazie! – tytyryty
Il LHS viene eseguito prima e il ritorno si esce dalla funzione
'falsy1 && falsy2' restituisce' falsy1 '- valutazione pigra. – georg
perché 'Boolean (" ") === false' – Hacketo
Sapevo già questo concetto di valutazione lazy, ma ho pensato che tutte le espressioni di confronto restituirebbero solo il valore booleano. Grazie per avermi corretto. –