Inizializzazione delle variabili JavaScript con l'operatore ||

Il JavaScript permette l’operazione di inizializzazione delle variabili utilizzando l’operatore logico ||. Pur essendo molto comodo, occorre prestare molta attenzione a come lo si usa. Vediamo qualche esempio.

Questa sintassi è utilizzata talvolta in concomitanza con un’altra caratteristica del linguaggio, ovvero quella di non avere una sintassi esplicita per i valori di default dei parametri delle funzioni; in JavaScript, infatti, TUTTE le funzioni sono a numero di argomenti variabili.

In tale contesto il test che si può effettuare è il seguente

foo();



function foo(bar) {



bar = bar || "test";



alert(bar);



}

In tal caso vedremo ovviamente un bel alert con “test”.

Purtroppo, e qui sta l’inghippo, l’operatore || è sensibile a tutto ciò che in JavaScript è falsy o truthy, ovvero a tutti quei valori che l’inteprete in fase di test di un’espressione riduce al valore booleano true o false.

foo();

foo(false);

foo(0);

foo(null);

foo("");



function foo(bar) {



bar = bar || "test";



alert(bar);



}

In tutti questi casi vedremo spuntare un bel “test” nel messaggio di alert, e probabilmente non è esattamente quello che intuitivamente ci saremmo aspettati.

Se vogliamo fare un test robusto per la presenza o meno del nostro parametro, allora occorre ricorrere al classico (meno elegante e un po’ cervellotico):

function foo(bar) {



if (typeof bar == 'undefined') {

bar = "test";

}



console.log(test);



}

Da notare una piccola perversione: nel caso in cui “bar” non venga passato (e sia dunque “undefined”), l’inteprete avrà comunque definito il simbolo “bar” per lo scope locale della funzione e non come simbolo globale

Test effettuati su FF 3

Comments (View)
blog comments powered by Disqus