Javascript tip: verificare il valore di una variabile

Creato il 23 novembre 2010 da Dymissy

Quando dobbiamo verificare il valore di una variabile utilizzando Javascript, molto probabilmente realizzeremo qualcosa di questo genere:

if( name == 'bob' || name == 'matt' || name == 'michael' || name == 'john' ) { ... }

una sequenza di OR con tutti i valori a cui siamo interessati.

Ad esser sincero non ho mai amato questo genere di soluzioni con una sequenza interminabile di condizioni all’interno del costrutto IF. Nella maggior parte dei casi è possibile ricorrere a soluzioni alternative che ci fanno risparmiare tempo e ripetizioni inutili di codice.

Una soluzione molto semplice, in questo caso, potrebbe essere considerare i valori ammissibili come un array e utilizzare il costrutto in, come nel seguente esempio preso dal blog snook.ca:

if( name in { 'bobby' :'' , 'sue' : '', 'smith' : '' } ) { ... }

Utilizzando lo strumento profile di Firebug possiamo vedere che a livello prestazionale si guadagna qualcosa però anche questa soluzione non mi piace particolarmente. Costruire un array associativo per effettuare un test non è, secondo me, una soluzione molto pratica.

Il metodo che preferisco, invece, consiste nell’utilizzare, quando possibile, il metodo test(). Tale metodo viene eseguito su una regular expression passando come parametro il nome della variabile e restituisce true se la variabile “matcha” con l’espressione regolare. E’ lo stesso metodo che viene utilizzato per verificare che un indirizzo email sia valido.

Quindi, per controllare il valore di una variabile utilizzando il metodo test(), possiamo utilizzare una soluzione come la seguente:

if (/^bobby|sue|smith$/.test(name)) { ... }

La stringa /^bobby|sue|smith$/ contiene i valori ammissibili della variabile sottoforma di regular expression. Su tale pattern viene richiamato il metodo test sulla variabile. A livello prestazionale non ho avuto modo di verificare se la prima soluzione sia migliore della seconda o viceversa, il profilatore di Firebug restituisce tempi uguali. La seconda soluzione però la preferisco più per una questione di “stile” e di comodità.

Like this post? Share It! :)

Potrebbero interessarti anche :

Possono interessarti anche questi articoli :