In JavaScript ci sono quattro operatori logici: || (OR), && (AND), e ! (NOT), ?? (Nullish Coalescing). Qui abbiamo trattato i primi tre, l’operatore ?? sarà approfondito nel prossimo articolo.
Nonostante si chiamino “logici”, possono essere applicati a valori di qualsiasi tipo, non solo ai booleani (i risultati stessi possono essere di qualunque tipo).
Vediamoli nei dettagli.
|| (OR)
L’operatore “OR” viene rappresentato da due linee verticali:
result = a || b;
Nella programmazione classica, l’OR logico è utilizzato per manipolare solo tipi booleani. Se almeno un argomento è true, allora il risultato sarà true, altrimenti sarà false.
In JavaScript questo operatore è un po’ più potente. Ma prima vediamo come si comporta con i valori booleani.
Ci sono quattro combinazioni logiche possibili:
alert( true || true ); // true
alert( false || true ); // true
alert( true || false ); // true
alert( false || false ); // false
Come possiamo vedere, il risultato è sempre true, tranne nei casi in cui entrambi gli operandi sono false.
Se un operando non è di tipo booleano, allora viene momentaneamente convertito per la valutazione.
Ad esempio, il numero 1 viene considerato come true, il numero 0 come false:
if (1 || 0) { // funziona proprio come ( true || false )
alert( 'truthy!' );
}
La maggior parte delle volte, OR || viene utilizzato in un if per verificare se almeno una delle condizioni è vera.
Ad esempio:
let hour = 9;
if (hour < 10 || hour > 18) {
alert( 'The office is closed.' );
}
Possiamo passare molteplici condizioni:
let hour = 12;
let isWeekend = true;
if (hour < 10 || hour > 18 || isWeekend) {
alert( 'The office is closed.' ); // l'Ufficio è chiuso
}
OR "||" trova il primo valore vero
La logica descritta sopra è ovvia. Adesso proviamo ad addentrarci in qualche caratteristica “extra” di JavaScript.
Si può estendere l’algoritmo come segue.
Dati svariati operandi:
result = value1 || value2 || value3;
L’operatore OR || si comporta come segue:
- Valuta gli operandi da sinistra a destra.
- Ogni operando viene convertito a booleano. Se il risultato è
true, il logical OR si ferma e ritorna il valore originale dell’operando. - Se tutti gli operandi sono stati valutati e nessuno è
true, ritorna l’ultimo operando.
Un valore viene ritornato nella sua forma originale, non nella sua conversione booleana.
In altre parole, una catena di OR "||" ritorna il primo valore vero; se invece non ce ne sono ritorna l’ultimo valore.
Ad esempio:
alert( 1 || 0 ); // 1 (1 è vero)
alert( null || 1 ); // 1 (1 è il primo valore true)
alert( null || 0 || 1 ); // 1 (il primo valore true)
alert( undefined || null || 0 ); // 0 (tutti falsi, ritorna l'ultimo valore)
Questo ci permette alcuni utilizzi interessanti rispetto al “puro e classico OR booleano"boolean-only OR”.
-
Trovare il primo valore vero in una lista di variabili o espressioni.
Immaginiamo di avere diverse variabili,
firstName,lastNameenickName, tutte opzionali (possono quindi essere