In JavaScript i numeri si possono confrontare con i seguenti operatori relazionali e di uguaglianza.
| Confronto | Operatore |
|---|---|
| Maggiore di | a > b |
| Maggiore o uguale a | a >= b |
| Minore di | a < b |
| Minore o uguale a | a <= b |
| (Strettamente) uguale | a === b |
| Non (strettamente) uguale | a !== b |
Il risultato del confronto è sempre un valore booleano, quindi true oppure false.
1 < 3;
// => true
2 !== 2;
// => false
1 === 1.0;
// => true
// All numbers are floating-points, so this is different syntax
// for the exact same value.
In JavaScript, gli operatori di confronto visti sopra si possono usare anche per confrontare le stringhe. In quel caso viene applicato un ordine alfabetico (lessicografico). Puoi trovare un elenco dell'ordine esatto di tutti i caratteri qui.
'Apple' > 'Pear';
// => false
'a' < 'above';
// => true
'a' === 'A';
// => false
Devi fare attenzione quando confronti due variabili che sembrano contenere valori numerici ma sono di tipo stringa.
A causa dell'ordine alfabetico, il risultato non sarà lo stesso di un confronto tra valori di tipo Number.
10 < 2;
// => false
'10' < '2';
// => true (because "1" comes before "2")
Un altro modo per confrontare le stringhe è il metodo localeCompare. Permette di impostare diverse opzioni per regolare il modo in cui le stringhe vengono confrontate.
Potresti chiederti cosa significhino i tre segni di uguale per verificare l'uguaglianza in JavaScript.
=== rappresenta il controllo di uguaglianza stretta, il che significa che non viene eseguita alcuna conversione di tipo e che valori di tipi diversi non sono mai uguali.
'3' === 3;
// => false
// The value on the left has type string, the value on the right
// has type number.
1 === 1n;
// => false
// The value on the left has type number, the value on the right
// has type bigint.
Usare === e !== è il modo consigliato per verificare l'uguaglianza in JavaScript.
Esistono anche == e !=, che rappresentano il controllo di uguaglianza debole.
Dovresti evitarli, perché applicano una conversione implicita di tipo prima di eseguire il confronto.
In questi casi gli esiti sono difficili da prevedere e a volte non sono quelli che ti aspetti.
Puoi leggere di più qui.
0 == false;
// => true
In teoria, puoi anche confrontare valori di tipi diversi (ad esempio, "1" < 2).
In quel caso i valori vengono convertiti implicitamente per determinare se il risultato è vero o falso.
Come per il controllo di uguaglianza debole, anche questo non è consigliato, per lo stesso motivo appena visto.
Cosa dovresti fare invece? Puoi applicare la conversione esplicita di tipo. In questo modo puoi assicurarti che i valori abbiano il tipo corretto prima di eseguire il confronto. Il codice sarà così più facile da capire e meno soggetto a errori.