Scusate, l'OR logico JS fa valutazione di cortocircuito?
Scusate, l'OR logico JS fa valutazione di cortocircuito?
Per fare un tavolo ci vuole un fiore.
La risposta è sì.
Installa Forum HTML.it Toolset per una fruizione ottimale del Forum
aabc
Ultima modifica di filips; 29-12-2015 a 19:34
Per fare un tavolo ci vuole un fiore.
Ti ringrazio per la conferma. Lo avevo dedotto considerando questa sintassi alla fine del cap. 35 della guida JS:
codice:char = char || " ";
Avevo fatto presente allo staff che nei capitoli precedenti non era presente una giustificazione di questo uso per l'assegnazione a una variabile, per cui ci si sarebbe potuti trovare spiazzati davanti a questa sintassi messa lì all'improvviso.
Ultima modifica di filips; 29-12-2015 a 19:29
Per fare un tavolo ci vuole un fiore.
Capisco.
Per meglio chiarire:
in quel caso, come penso tu abbia constatato, non si tratta di una normale assegnazione ad una variabile ma piuttosto è una tecnica usata per assegnare un valore di default a tale variabile qualora questa (in linea di massima) risulti undefined. Per cui, nella valutazione dell'espressione, se il primo operatore restituisce un valore equivalente a false (undefined lo è), allora viene valutato il successivo operatore che, in questo caso, restituisce una stringa non vuota (ed equivale quindi a true), per cui sarà preso in considerazione..
Infatti, dando uno sguardo alla guida in questione, quello script sta dentro una funzione e la variabile è definita come argomento della funzione stessa:
Da tenere presente che in JavaScript, sulla chiamata di una funzione, non è obbligatorio passarne tutti i valori per gli argomenti specificati, per tale motivo è possibile avere (da destra a sinistra) degli argomenti con valore undefined. In questo caso viene quindi usata quella tecnica (con l'operatore ||) per assegnare un valore di default (nel caso specifico, uno spazio " ").String.prototype.padLeft = function(width, char) {
var result = this;
if (this.length < width) {
result = new Array(width - this.length + 1).join(char) + this;
}
return result;
};
Un'alternativa può essere la specificazione di un valore di default direttamente sulla definizione degli argomenti della funzione.
Questo metodo (utilizzato anche in diversi altri linguaggi) evita l'uso di ulteriori tecniche, come quella in questione.codice:String.prototype.padLeft = function(width, char = " ") {
Tuttavia questa sintassi è valida secondo le attuali specifiche ECMAScript 6, per cui è possibile che non sia supportata da alcuni browser (specialmente se non troppo recenti), e in tal caso genererebbe degli errori nell'esecuzione dello script. Per questo, in genere, è comunque preferibile utilizzare tecniche come quella in oggetto.
In conclusione, è possibile che nella guida in questione non sia stato approfondito tale argomento perché magari non è importante rispetto a ciò che la guida stessa propone. Chiaramente è giusto una mia ipotesi. Ripeto, non ho letto quella guida. Il tuo disappunto potrebbe comunque essere accettabile.
Ultima modifica di KillerWorm; 29-12-2015 a 20:48
Installa Forum HTML.it Toolset per una fruizione ottimale del Forum
Preciso che la guida è ottima (come altre di HTML. it), solo che in questa circostanza mi sono dovuto un po' scervellare per capire, e comunque solo grazie al contesto dell'esempio, senza il quale sarebbe stato impossibile. Inoltre si deve sempre chiedere conferma per essere certi di aver interpretato bene.
Un cenno tipo la tua annotazione (magari messo al cap. 8) sarebbe stato perfetto. Grazie ancora.
(Piccola nota a margine: certo che con JS, in quanto a prolissità, si viaggia ai minimi storici, in quanto a flessibilità ai massimi.)
Per fare un tavolo ci vuole un fiore.