Operatori relazionali ECMAScript
- Pagina precedente Operatore addizionale
- Pagina successiva Operatore di uguaglianza
Gli operatori di relazione eseguono operazioni di confronto. Ogni operatore di relazione restituisce un valore Booleano.
Modalità di confronto convenzionale
Gli operatori di relazione "minore di", "maggiore di", "minore o uguale" e "maggiore o uguale" eseguono confronti numerici tra due numeri, allo stesso modo degli operatori di confronto aritmetico.
Ogni operatore di relazione restituisce un valore Booleano:
var bResult1 = 2 > 1 // true var bResult2 = 2 < 1 // false
Ma, applicare l'operatore di relazione a due stringhe comporta un comportamento diverso. Molti pensano che "minore" significhi "più in alto nell'ordine alfabetico", e "maggiore" significhi "più in basso nell'ordine alfabetico", ma non è così. Per le stringhe, ogni carattere della prima stringa viene confrontato numericamente con il carattere corrispondente della seconda stringa. Dopo aver completato questa operazione di confronto, viene restituito un valore Booleano. Il problema è che i codici dei caratteri maiuscoli sono inferiori a quelli dei caratteri minuscoli, il che potrebbe portare a situazioni come le seguenti:
var bResult = "Blue" < "alpha"; alert(bResult); // Output: true
Nell'esempio precedente, la stringa "Blue" è minore di "alpha" perché il codice carattere della lettera B è 66, mentre quello della lettera a è 97. Per ottenere un confronto letterale vero e proprio, è necessario convertire le due stringhe in forma di maiuscolo o minuscolo identica prima di confrontarle:
var bResult = "Blue".toLowerCase() < "alpha".toLowerCase(); alert(bResult); //Output false
Convertire entrambi gli operandi in minuscolo garantisce di identificare correttamente che "alpha" precede "Blue" nell'ordine alfabetico.
Confrontare un numero e una stringa
Un'altra situazione complicata si verifica quando si confrontano due numeri rappresentati come stringhe, come ad esempio:
var bResult = "25" < "3"; alert(bResult); //Output "true"
Questo codice confronta la stringa "25" e il numero "3". Entrambi gli operandi sono stringhe, quindi si confrontano i loro codici di carattere (il codice di carattere di "2" è 50, il codice di carattere di "3" è 51).
Ma, se uno degli operandi è un numero, il risultato è interessante:
var bResult = "25" < 3; alert(bResult); //Output "false"
Qui, la stringa "25" sarà convertita in il numero 25 e poi confrontata con il numero 3, come previsto.
Ogni volta che si confronta un numero e una stringa, ECMAScript convertirà la stringa in un numero e li confronterà in ordine numerico.
Ma cosa succede se una stringa non può essere convertita in un numero? Considera l'esempio seguente:
var bResult = "a" < 3; alert(bResult);
Puoi prevedere cosa outputterà questo codice? La lettera "a" non può essere convertita in un numero significativo. Tuttavia, se si chiama il metodo parseInt(), il risultato è NaN. Secondo le regole, qualsiasi operatore di confronto che contenga NaN deve restituire false, quindi questo codice anche output false:
var bResult = "a" >= 3; alert(bResult);
Di solito, se i due valori da confrontare nel confronto lessicografico restituiscono false, allora l'operatore maggiore o uguale deve restituire true, ma se un numero è NaN, la situazione è diversa.
- Pagina precedente Operatore addizionale
- Pagina successiva Operatore di uguaglianza