Truthy e Falsy in JavaScript: confrontare valori in modo sicuro e leggibile

by Anastasia P.
SHARE
Truthy e Falsy in JavaScript: confrontare valori in modo sicuro e leggibile
© Guida-HTML5.it

Introduzione

In JavaScript, i concetti di truthy e falsy sono fondamentali per scrivere condizioni efficaci. Ogni valore, quando viene usato in un contesto booleano, viene interpretato come vero o falso. Questo comportamento è molto utile, ma può anche generare bug se non si conoscono bene le regole.

In questo tutorial ci concentriamo su un sotto-argomento pratico e spesso sottovalutato: come confrontare valori in modo sicuro usando truthy e falsy senza confondere assenza di dato, valore vuoto e valore valido. È un tema importante quando lavori con form, API, filtri, ricerca, configurazioni e dati opzionali.

Molti sviluppatori usano semplicemente if (valore), ma non sempre è la scelta giusta. Ad esempio, il numero 0 è falsy, ma potrebbe essere un valore perfettamente valido. Lo stesso vale per la stringa vuota "", che a volte indica un campo non compilato, ma in altri casi può essere un valore legittimo.

Codice completo

// Esempio pratico: gestione di dati utente provenienti da un form o da un´API

const profilo = {
  nome: "Luca",
  eta: 0,              // valore valido: un neonato o un dato ancora non aggiornato
  bio: "",             // campo vuoto
  email: null,         // dato assente
  iscrizioneAttiva: false
};

// Funzione che mostra uno stato leggibile per ogni campo
function descriviValore(etichetta, valore) {
  if (valore) {
    console.log(`${etichetta}: presente e truthy -

Spiegazione

Il punto chiave è questo: truthy e falsy non significano “valido” o “non valido” in senso assoluto. Significano solo come JavaScript interpreta un valore in una condizione booleana.

1. Cosa succede con if (valore)

Quando scrivi:

if (valore) {
  //...
}

JavaScript converte automaticamente valore in un booleano. Alcuni valori diventano falsi, ad esempio:

  • false
  • 0
  • -0
  • 0n
  • "" e ´´
  • null
  • undefined
  • NaN

Tutti gli altri valori sono truthy. Questo include anche stringhe non vuote, numeri diversi da zero, array e oggetti, anche se “sembrano vuoti”.

2. Perché 0 può creare problemi

Uno degli errori più comuni è trattare 0 come se fosse assenza di dato. Per esempio, se hai un campo eta, il valore 0 è falsy, ma non significa necessariamente che il dato manchi. Potrebbe essere un valore valido o un caso da gestire esplicitamente.

Per questo, invece di scrivere:

if (eta) {
  console.log("Età presente");
}

è meglio usare un controllo più preciso:

if (eta === null || eta === undefined) {
  console.log("Età non disponibile");
}

3. Differenza tra stringa vuota e valore mancante

Una stringa vuota "" è falsy, ma spesso va trattata in modo diverso da null o undefined. Ad esempio, in un campo nome di un modulo, una stringa vuota può significare che l’utente non ha scritto nulla. Invece null può significare che il dato non è stato ancora caricato o non esiste.

Nel codice di esempio, la funzione validaNome usa trim() per evitare che una stringa fatta solo di spazi venga considerata valida. Questo è un controllo molto utile nelle applicazioni reali.

4. Quando un valore booleano false è un dato valido

Un altro caso delicato è la configurazione di opzioni. Se un utente imposta esplicitamente una preferenza su false, non devi interpretarla come “manca il dato”.

Per esempio:

  • false = l’utente ha deciso di disattivare qualcosa
  • undefined = l’utente non ha espresso alcuna preferenza

Questo è il motivo per cui nel codice abbiamo usato preferenza === undefined invece di if (preferenza).

Best practice

Per usare truthy e falsy in modo corretto, conviene seguire alcune regole pratiche:

  • Non usare if (valore) quando 0, "" o false sono valori validi. In questi casi, fai controlli espliciti.
  • Usa === null e === undefined per distinguere assenza di dato e valore presente. Questo rende il codice più leggibile e meno ambiguo.
  • Valida le stringhe con trim() se gli spazi non devono contare. È una pratica molto comune nei form.
  • Evita di affidarti solo alla conversione implicita. JavaScript è flessibile, ma la flessibilità può nascondere errori.
  • Documenta il significato dei valori falsy nel tuo progetto. Ad esempio, chiarisci se false indica disattivazione o dato assente.

Un buon criterio è questo: usa la verità implicita solo quando ti interessa sapere se un valore esiste davvero come contenuto utile. Se invece devi distinguere tra diversi casi, scrivi condizioni esplicite.

Riepilogo

Truthy e falsy sono un meccanismo centrale di JavaScript, ma vanno usati con attenzione. Il problema non è il loro funzionamento, bensì l’uso troppo generico di if (valore) in contesti dove i dati possono assumere significati diversi.

In questo tutorial abbiamo visto come:

  • distinguere tra valore mancante e valore falsy;
  • evitare errori con 0, false e stringhe vuote;
  • scrivere controlli più precisi e leggibili;
  • gestire meglio dati di form, configurazioni e API.

La regola finale è semplice: se un valore falsy può essere comunque valido, non trattarlo come assenza di dato. In questi casi, meglio un controllo esplicito e chiaro che una condizione breve ma ambigua.

Approfondisci con risorse ufficiali

  • MDN Web Docs - Boolean: documentazione sul tipo booleano e sulle conversioni implicite.
  • MDN Web Docs - Truthy: spiegazione dei valori considerati truthy in JavaScript.
  • MDN Web Docs - Falsy: elenco e comportamento dei valori falsy.
  • ECMAScript Language Specification: specifica ufficiale del linguaggio per chi vuole approfondire il comportamento interno delle conversioni.

SHARE