Menu

Valori truthy e falsy in JavaScript: l'elenco completo

Cosa è truthy e cosa è falsy in JavaScript, l'elenco completo dei valori falsy e come funziona la conversione a booleano nel codice reale.

Questa pagina include editor eseguibili: modifica, esegui e vedi subito l'output.

Ogni valore ha un suo "umore" booleano

JavaScript ti permette di mettere qualsiasi valore dove ci si aspetta un booleano: dentro un if, come condizione di un while, accanto a && o ||. Quando lo fai, il valore viene convertito in true o false. I valori che diventano false si chiamano falsy. Tutti gli altri sono truthy.

Nessuna funzione di conversione, nessun cast esplicito: JavaScript lo fa in automatico. Le regole sono fisse e poche, quindi una volta che conosci l'elenco dei falsy, ogni altro caso viene da sé.

L'elenco completo dei falsy

I valori falsy sono esattamente sette. Tutto il resto del linguaggio è truthy.

Tutto qui. L'elenco:

  • false: il booleano stesso.
  • 0 e -0: entrambi gli zeri.
  • 0n: lo zero BigInt.
  • "": la stringa vuota (con apici singoli, doppi o backtick, è lo stesso).
  • null: il valore "niente, di proposito".
  • undefined: il valore "non impostato".
  • NaN: il risultato di calcoli non validi come 0 / 0.

Impara a memoria questi sette. Poi, per qualsiasi valore su cui hai dubbi, chiediti: "è uno di quei sette?" Se no, è truthy.

Le sorprese: "0", [] e {}

Qui è dove chi inizia si scotta. Molti valori sembrano vuoti ma sono truthy:

Le stringhe sono falsy solo quando hanno zero caratteri. "0" ha un carattere, quindi è truthy. Array e oggetti sono sempre truthy, anche quando sono vuoti, perché JavaScript li tratta come oggetti, e tutti gli oggetti sono truthy a prescindere da cosa contengono.

Se arrivi da Python, è il cambio di mentalità più grande. In Python [] e {} sono falsy. In JavaScript no.

Controllare se qualcosa è "vuoto" nel modo giusto

Dato che [] e {} sono truthy, non puoi usarli direttamente in un if per controllare se sono vuoti. Sii esplicito:

Lo stesso vale per le stringhe, se vuoi considerare vuota una stringa fatta solo di spazi:

Truthy/falsy è una scorciatoia comoda, non un sostituto del ragionare su cosa significa "vuoto" per i tuoi dati.

Convertire in un vero booleano

A volte ti serve un vero true o false, non solo un valore vagamente truthy. Ci sono due modi idiomatici:

Boolean(x) è la conversione esplicita. !!x è la stessa cosa in forma abbreviata: il primo ! converte in booleano e inverte, il secondo ! inverte di nuovo. Sono comuni entrambi. !! è più breve; Boolean() si legge meglio.

Vedrai spesso !! nelle istruzioni return, quando una funzione deve restituire un booleano pulito:

Truthy e falsy con && e ||

Gli operatori logici non restituiscono true o false: restituiscono uno degli operandi. Quale dei due dipende dalla truthiness:

Ecco perché value || defaultValue è uno schema così diffuso per i valori predefiniti. Ma nasconde una trappola: tratta tutti i valori falsy allo stesso modo, compresi 0 e "", che spesso sono input validi:

Se vuoi ripiegare su un valore predefinito solo con null o undefined, usa invece l'operatore di nullish coalescing ??. Ha una pagina tutta sua.

Promemoria rapido

Stampalo, attaccalo al monitor e vai avanti con la tua vita.

Prossimo passo: iteratori e generatori

Ora che hai in mano condizioni e cicli, il prossimo capitolo mostra come JavaScript permette ai valori di prodursi su richiesta. Iteratori e generatori sono il meccanismo dietro for...of, lo spread e molte API moderne, e sono il prossimo argomento.

Domande frequenti

Quali sono i valori falsy in JavaScript?

Sono esattamente sette: false, 0, -0, 0n (lo zero BigInt), '' (stringa vuota), null, undefined e NaN. Tutto il resto è truthy, compresi '0', 'false', [] e {}. Impara a memoria questo breve elenco di falsy e conoscerai la risposta per ogni altro valore per esclusione.

Un array vuoto è truthy o falsy in JavaScript?

Truthy. if ([]) { ... } esegue il blocco, cosa che sorprende chi arriva da Python o PHP. Array e oggetti sono oggetti, e tutti gli oggetti sono truthy a prescindere dal contenuto. Per controllare se un array è vuoto, usa esplicitamente arr.length === 0.

Come converto un valore in booleano in JavaScript?

In due modi: Boolean(value) è la forma esplicita, e !!value è la scorciatoia (una doppia negazione che converte e poi inverte di nuovo). Entrambe seguono le stesse regole truthy/falsy. Usale quando ti serve un vero true/false, non solo un risultato vagamente truthy.

Illustrazione dei linguaggi di programmazione di Coddy

Impara a programmare con Coddy

INIZIA