Booleani e confronti
5 == "5" è true ma 5 === "5" è false. Il triplo uguale controlla anche che i due lati siano dello stesso tipo.
Domande con risposta sì o no
I programmi fanno domande di continuo. La password è abbastanza lunga? Il giocatore ha finito le vite? Oggi è fine settimana? Ognuna ha una di due risposte, e JavaScript le rappresenta con i due valori booleani, true e false. I booleani prendono il nome da George Boole, il matematico dell'Ottocento che elaborò un'algebra del vero e del falso. Da soli non sono molto emozionanti, ma sono ciò che permette a un programma di prendere decisioni, l'argomento della prossima unità.
Operatori di confronto
Un confronto prende due valori e produce un booleano. Qui sotto trovi i sei che userai di più. Nota che «uguale» si scrive con tre segni di uguale, perché un solo = significa già «memorizza un valore».
| Operatore | Domanda | Esempio | Risultato |
|---|---|---|---|
| === | uguale? | 4 === 4 | true |
| !== | diverso? | 4 !== 4 | false |
| < | minore? | 3 < 8 | true |
| > | maggiore? | 3 > 8 | false |
| <= | minore o uguale? | 8 <= 8 | true |
| >= | maggiore o uguale? | 7 >= 8 | false |
Come l'aritmetica, un confronto è un'espressione, quindi puoi stamparlo o salvarlo in una variabile: const isAdult = age >= 18; mette true o false in isAdult a seconda dell'età. I nomi delle variabili booleane spesso iniziano con is, has o can, così il codice si legge come una domanda.
Perché === e non ==
JavaScript ha anche il doppio uguale, ==, chiamato uguaglianza debole. Prima di confrontare cerca di convertire i due lati nello stesso tipo, e questo dà risultati difficili da prevedere: 5 == "5" è true, e lo è anche 0 == "". Il triplo uguale ===, l'uguaglianza stretta, non converte mai. Se i tipi sono diversi, la risposta è semplicemente false. MDN e la maggior parte delle guide di stile consigliano === e !== per il codice di tutti i giorni, e questo corso li usa sempre.
console.log(5 === 5); // true
console.log(5 === "5"); // false
// uguaglianza debole, meglio evitarla:
console.log(5 == "5"); // true
console.log("cat" !== "dog"); // trueSi possono confrontare anche le stringhe. === controlla che due stringhe abbiano esattamente gli stessi caratteri, maiuscole comprese, quindi "Yes" === "yes" è false. Gli operatori < e > confrontano le stringhe carattere per carattere usando i loro codici, il che per le parole in minuscolo è vicino all'ordine del dizionario: "apple" < "banana" è true. In quest'ordine le lettere maiuscole vengono prima di tutte le minuscole, quindi anche "Zebra" < "apple" è true.
Combinare le risposte con &&, || e !
Le domande vere hanno spesso più parti. Una giostra può richiedere un'altezza di almeno 120 cm e un'età di almeno 8 anni. JavaScript unisce le risposte booleane con gli operatori logici. && (and, «e») è true solo quando entrambi i lati sono true. || (or, «o») è true quando almeno un lato è true. ! (not, «non») inverte un booleano, quindi !true è false.
const height = 130;
const age = 7;
console.log(height >= 120 && age >= 8); // false
console.log(height >= 120 || age >= 8); // true
console.log(!(age >= 8)); // trueEsempio svolto. Un giorno è nel fine settimana? day === "Sat" || day === "Sun". Nota che devi ripetere day === da entrambi i lati. Scrivere day === "Sat" || "Sun" sembra naturale in inglese ma non fa ciò che intendi, perché "Sun" da solo non è un confronto. I confronti vengono calcolati prima di && e ||, quindi height >= 120 && age >= 8 non ha bisogno di altre parentesi, anche se aggiungerle non fa mai male.
Un'altra idea che incontrerai più avanti: quando JavaScript ha bisogno di un booleano ma riceve un altro valore, tratta alcuni valori come false. Questi valori falsy sono false, 0, la stringa vuota "", null, undefined e NaN. Tutto il resto, comprese le stringhe "0" e "false", conta come true.
and && richiede che entrambi siano veri. or || ne richiede uno vero. not ! inverte la risposta.
| boolean | true o false |
| === | Uguaglianza stretta: stesso valore e stesso tipo |
| !== | Disuguaglianza stretta: non sono uguali |
| == | Uguaglianza debole: prima converte i tipi (da evitare) |
| && | and: true solo se entrambi i lati sono true |
| || | or: true se almeno un lato è true |
| ! | not: scambia true e false |
| falsy | false, 0, "", null, undefined e NaN |
- Che cosa stampa?
console.log(7 > 7);- true
- false
- Che cosa stampa?
console.log(7 >= 7);- true
- false
- Che cosa stampa?
console.log(3 === "3");- true
- false
- Che cosa stampa?
console.log(3 == "3");- true
- false
- Che cosa stampa?
console.log(true && false);- true
- false
- Che cosa stampa?
console.log(true || false);- true
- false
- Che cosa stampa?
const x = 12; console.log(x > 10 && x < 20);- true
- false
- Che cosa stampa?
console.log(!(5 > 2));- true
- false
- Che cosa stampa?
console.log("Yes" === "yes");- true
- false
- Che cosa stampa?
console.log("apple" < "banana");- true
- false
- Quale valore è falsy?
"0"0"false"
- Quale controlla correttamente che day sia "Sat" o "Sun"?
day === "Sat" || "Sun"day === "Sat" || day === "Sun"day === "Sat" && day === "Sun"
- I confronti producono true o false.
- Usa === e !==; == converte i tipi e sorprende le persone.
- && li richiede entrambi, || ne richiede uno, ! inverte.
- Ripeti il confronto completo su ogni lato di || e &&.
- Valori falsy: false, 0, "", null, undefined, NaN.
Fonti di questo corso (2)
- MDN Web Docs, JavaScript Guide (developer.mozilla.org/en-US/docs/Web/JavaScript/Guide, chapters Introduction, Grammar and types, Control flow, Loops and iteration, Functions, Expressions and operators, Numbers and strings, Indexed collections, Working with objects; checked 2026-10-17)
- Ecma International, ECMA-262 ECMAScript 2026 Language Specification, 17th edition, June 2026 (tc39.es/ecma262 and ecma-international.org/publications-and-standards/standards/ecma-262, checked 2026-10-17)
Consultato il: 2026-10-17