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 variabile.

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

Print