sabato 21 settembre 2013

Come confrontare le stringhe in JavaScript?

Problema

Vuoi confrontare due stringhe per decidere se sono uguali.

Soluzione

Usa l'operatore ==:

var nome = prompt("Come ti chiami?", "");

if(nome == 'Ciccio') {
    alert('Bene!')
} else {
    alert('Non ti chiami Ciccio!');
}

Discussione

Due stringhe vengono confrontate con l'operatore ==. Quando questo operatore viene utilizzato in un test condizionale, il blocco di codice che segue viene eseguito solo se il test è vero (le stringhe sono uguali):

if(nome == 'Ciccio') {
    //Questo alert viene eseguito
    alert('Ti chiami Ciccio');
}

Se le stringhe non sono uguali, ed è presente il blocco else, sarà quest'ultimo ad essere eseguito:

if(nome == 'Ciccio') {
    //Questo NON viene eseguito    
    alert('Bene!')
} else {
    //Questo viene eseguito
    alert('Non ti chiami Ciccio!');
}

Ci sono diversi fattori che possono influenzare l'uguaglianza di due stringhe. Per esempio, le stringhe potrebbero essere uguali, ma differire per una lettera maiuscola/minuscola come nel caso "Ciccio/ciccio".

In questi casi conviene convertire tutte le lettere in maiuscole o minuscole utilizzando i metodi .toUpperCase() e .toLowerCase() rispettivamente, e poi effettuare il confronto.

if(nome.toLowerCase() == 'CICCIO') {
    alert('Bene!')
} else {
    alert('Non ti chiami Ciccio!');
} 

Cosa succede se confrontiamo un numero con una stringa? Ad esempio se avessimo:

25 == "25" //vero

Questo codice risulta vero perché viene effettuato un cast (ovvero una conversione automatica) del numero alla stringa "25".

Ci sono volte in cui potresti non volere questa conversione automatica e sapere se effettivamente due oggetti sono identici. In questi casi devi utilizzare l'operatore ===:

25 === "25" //falso

A volte potresti voler sapere quando due stringhe non sono uguali. In questi casi devi utilizzare gli operatori != e !==. Questi operatori funzionano allo stesso modo degli operatori di uguaglianza, solamente verificano se gli oggetti sono diversi:

25 !== "25" //vero

Puoi utilizzare anche gli operatori minore e maggiore per confrontare le stringhe.

'ala' < 'barca' //vero
'erba' > 'cena' //vero

Non c'è differenza tra maggiore (>) e maggiore o uguale (>=). Questo vale anche per gli operatori minore (<) e minore o uguale (<=).

Nessun commento :

Posta un commento