Introdução: por que essa tarefa é mais fácil do que parece
\n\nTodo desenvolvedor que já escreveu em JavaScript já se deparou com a situação de precisar verificar se uma string está vazia, ou se talvez seja null ou undefined. Parece simples, certo? Mas sejamos honestos: quantas vezes você escreveu if (str == "") e teve um bug quando a variável era null? E quantas vezes você tentou chamar .trim() em undefined e viu um erro vermelho no console?
Este tópico é uma das perguntas mais populares no Stack Overflow, com dezenas de milhares de visualizações. E não é à toa. JavaScript tem muitas nuances que transformam uma verificação simples em um campo minado. Neste artigo, vamos analisar todas as formas possíveis, desde as mais óbvias até as profissionais, e descobrir qual é a melhor para usar no seu projeto.
\n\nVamos falar sobre o que são valores falsy, como funcionam os operadores == e ===, e por que "" e 0 não são a mesma coisa que false. Ao final do artigo, você saberá exatamente como escrever uma verificação universal que não falhará.
O problema: o que considerar como string "vazia"?
\n\nAntes de escrever código, precisamos definir claramente o que estamos verificando. No contexto da pergunta "How do I check for an empty/undefined/null string in JavaScript?", geralmente nos referimos a três estados:
\n\n- \n
- String vazia (
""ou'') — string de comprimento zero. \n - null — ausência intencional de valor. \n
- undefined — variável declarada, mas não inicializada. \n
Mas há um quarto caso implícito: uma string composta apenas por espaços (" "). Muitas vezes ela também é considerada "vazia" do ponto de vista da lógica de negócios. Vamos analisar todas as variações.
Método 1: Conversão booleana (o mais simples)
\n\nA forma mais popular e concisa é usar o fato de que JavaScript converte automaticamente valores para true ou false em um contexto booleano.
\n\nlet str = "";\n\nif (!str) {\n console.log("String vazia, null ou undefined");\n} else {\n console.log("String não está vazia");\n}\n\n\nEste código funcionará para "", null, undefined, 0, NaN e false. Por quê? Porque todos esses valores em JavaScript são considerados falsy. Se você tem certeza de que a variável é uma string (ou pode ser null/undefined), este método é suficiente.
Mas há um problema: se a variável for 0 (número), a verificação também dirá "vazio". Se isso for crítico, este método não é adequado.
Método 2: Comparação estrita (controle explícito)
\n\nSe você quiser ser o mais preciso possível e verificar apenas os três estados mencionados, use a comparação estrita (===).
function isEmptyOrNull(str) {\n return str === "" || str === null || str === undefined;\n}\n\nconsole.log(isEmptyOrNull("")); // true\nconsole.log(isEmptyOrNull(null)); // true\nconsole.log(isEmptyOrNull(undefined)); // true\nconsole.log(isEmptyOrNull("hello")); // false\nconsole.log(isEmptyOrNull(0)); // false (número não passará)\n\n\nEste código funciona sem surpresas. Ele não confunde 0 ou false com uma string vazia. Mas ele não trata strings compostas apenas por espaços.
Método 3: Trim + verificação (para "vazio" real)
\n\nFrequentemente, os usuários inserem espaços em formulários, e a string " " visualmente parece vazia. Para capturar também esses casos, precisamos remover os espaços usando o método .trim().
function isBlank(str) {\n return !str || str.trim() === "";\n}\n\nconsole