Menu

Valores Truthy e Falsy em JavaScript: Lista Completa

Entenda o que é truthy e falsy em JavaScript, veja a lista completa de valores falsy e descubra como a coerção booleana se comporta no código do dia a dia.

Todo valor tem um humor booleano

Em JavaScript, você pode colocar qualquer valor onde um booleano é esperado — dentro de um if, como condição de um while, ao lado de && ou ||. Quando isso acontece, o valor sofre uma coerção para true ou false. Os valores que viram false nessa conversão são chamados de falsy. Todo o resto é truthy.

index.js
Output
Click Run to see the output here.

Sem função de conversão, sem cast explícito — o JavaScript faz isso automaticamente. As regras são poucas e fixas, então, uma vez que você decorar a lista de valores falsy, todo o resto vira consequência.

A lista completa de valores falsy em JavaScript

Existem exatamente sete valores falsy. Qualquer outra coisa na linguagem é truthy.

index.js
Output
Click Run to see the output here.

É isso. A lista:

  • false — o próprio booleano.
  • 0 e -0 — os dois zeros.
  • 0n — o zero do BigInt.
  • "" — string vazia (aspas simples, duplas ou crase — tanto faz).
  • null — o valor "intencionalmente nada".
  • undefined — o valor "não definido".
  • NaN — o resultado de contas inválidas como 0 / 0.

Decore esses sete. Depois, sempre que bater dúvida sobre algum valor, pergunte: "ele é um desses sete?" Se não for, é truthy.

As pegadinhas: "0", [] e {}

É aqui que quem está começando se queima. Vários valores parecem vazios, mas são truthy:

index.js
Output
Click Run to see the output here.

Strings só são falsy quando têm zero caracteres. "0" tem um caractere, então é truthy. Já arrays e objetos são sempre truthy — mesmo vazios — porque o JavaScript trata ambos como objetos, e todo objeto é truthy, independente do que tem dentro.

Se você vem do Python, esse é o maior choque mental. Em Python, [] e {} são falsy. Em JavaScript, não.

Como verificar se está "vazio" do jeito certo

Como [] e {} são truthy, você não pode jogar esses valores direto num if para saber se estão vazios. Seja explícito:

index.js
Output
Click Run to see the output here.

O mesmo vale para strings, caso você queira tratar strings com apenas espaços em branco como vazias:

index.js
Output
Click Run to see the output here.

Truthy/falsy é um atalho conveniente, mas não substitui pensar direito no que "vazio" significa pra sua estrutura de dados.

Convertendo para um booleano de verdade

Às vezes você precisa de um true ou false de verdade, não só de algo "meio truthy". Dois idiomas comuns no JavaScript:

index.js
Output
Click Run to see the output here.

Boolean(x) é a forma explícita de fazer a coerção booleana. Já !!x é a versão abreviada — o primeiro ! converte para boolean e inverte, o segundo ! inverte de novo. As duas formas são comuns no dia a dia. !! é mais curto, mas Boolean() deixa a intenção mais clara na leitura.

É muito comum ver o operador !! em return, quando a função precisa devolver um boolean "limpo":

index.js
Output
Click Run to see the output here.

Valores truthy e falsy com && e ||

Uma coisa que costuma pegar muita gente desprevenida: os operadores lógicos && e || não retornam true ou false — eles devolvem um dos operandos. Qual deles? Depende de quem é truthy e quem é falsy:

index.js
Output
Click Run to see the output here.

É por isso que o padrão value || defaultValue é tão comum para definir valores padrão. Só que ele esconde uma pegadinha: trata todos os valores falsy da mesma forma, incluindo 0 e "", que muitas vezes são entradas válidas:

index.js
Output
Click Run to see the output here.

Se você só quer ter um fallback quando o valor for null ou undefined, use o operador de coalescência nula ??. Esse assunto tem um documento próprio.

Referência rápida

index.js
Output
Click Run to see the output here.

Imprime isso, cola no monitor e segue a vida.

Próximo: Iterators e Generators

Agora que você já domina condicionais e loops, o próximo capítulo mostra como o JavaScript faz valores surgirem sob demanda. Iterators e generators são a engrenagem por trás do for...of, do spread e de boa parte das APIs modernas — e é pra lá que vamos.

Perguntas frequentes

Quais são os valores falsy em JavaScript?

São exatamente sete: false, 0, -0, 0n (BigInt zero), '' (string vazia), null, undefined e NaN. Todo o resto é truthy — incluindo '0', 'false', [] e {}. Decore essa listinha curta de falsy e, por eliminação, você já sabe o comportamento de qualquer outro valor.

Array vazio é truthy ou falsy em JavaScript?

Truthy. O bloco dentro de if ([]) { ... } executa normalmente, o que costuma pegar quem vem de Python ou PHP desprevenido. Arrays e objetos são objetos, e todo objeto é truthy, independentemente do conteúdo. Para testar se um array está vazio, use arr.length === 0 de forma explícita.

Como converter um valor em boolean no JavaScript?

Duas formas: Boolean(value) é a versão explícita, e !!value é o atalho (uma dupla negação que faz a coerção e inverte de novo). As duas seguem as mesmas regras de truthy/falsy. Use quando você precisa de um true/false de verdade, e não só um resultado 'meio truthy'.

Aprenda a programar com o Coddy

COMEÇAR