Como checar se uma string está vazia em JavaScript

Neste artigo você vai aprender a como checar se uma string está vazia em JavaScript, utilizando um método muito simples da linguagem

Resposta rápida: em JavaScript existem três formas de checar se uma string está vazia

  1. str === "" compara com a string vazia e só dá true quando a variável é exatamente uma string sem nada dentro
  1. !str usa o fato de que a string vazia é um valor falsy, então pega o vazio mas também pega null, undefined, 0, NaN e false
  1. str.trim() === "" pega também a string que só tem espaço em branco, que é o caso clássico de formulário

var teste = ""; console.log(teste === ""); // true console.log(!teste); // true console.log(" ".trim() === ""); // true

Use === "" quando o tipo já é garantido, use !str quando qualquer ausência de valor conta como vazio e use trim() quando o dado vem digitado por gente

Só não chame .trim() direto em algo que pode ser null ou undefined, porque isso estoura erro: cheque a presença antes com if (str && str.trim() === "")

checar se uma string está vazia em JavaScript capa

Conteúdo também disponível em vídeo:

Fala programador(a), beleza? Bora aprender a como identificar uma string que está sem valor!

A forma mais simples é verificar se o dado está presente com uma instrução NOT

Veja um exemplo prático:

var teste = "com valor";
var teste2 = "";
console.log(!teste); // false
console.log(!teste2); // true

Esta instrução com NOT verifica se o valor está presente em uma determinada variável

Podemos desta maneira verificar diversos outros tipos de valores, que representam vazios, como:

  • NaN
  • null
  • undefined
  • 0
  • false
Formação Claude Code
Formação Recomendada

Formação Claude Code

Domine Claude Code do absoluto zero até o avançado

  • 116 aulas
  • 4 projetos
  • 9h 23min

Assim cobriremos outras possibilidades que podem representar a ausência de um valor em uma variável do nosso sistema, não somente strings

Outra possibilidade é checar se o valor está vazio diretamente

Veja o exemplo:

var teste = "com valor";
var teste2 = "";
if(teste === "") {
    console.log("Está vazio");
}
if(teste2 === "") {
    console.log("Está vazio");
}

Desta forma está mais explícita a checagem por valores vazios e vai resolver o nosso problema da mesma forma, identificando strings sem valor determinado

Neste código, apenas o segundo if é ativado, pois a variável teste2 não possui valor

Conclusão

Neste artigo vimos como checar se uma string está vazia em JavaScript

Utilizamos o operador NOT, que valida se um valor está presente em uma determinada variável, assim resolvendo o nosso problema

Também vimos uma outra abordagem mais implícita, onde checamos diretamente se o valor é nulo ou não

Confira também nosso catálogo de cursos gratuitos, com aulas semanais no YouTube

 

A lista completa de valores falsy em JavaScript:

A lista da MDN não para nesses cinco, se liga nela inteira:

false

0

-0

0n (o zero do BigInt)

"" (a string vazia)

null

undefined

NaN

document.all (o único objeto falsy da linguagem, herança dos tempos de detecção de navegador)

Todo o resto é truthy

Por isso o !valor é ótimo pra pegar "ausência de dado" no geral, mas se o teu problema é ESPECIFICAMENTE string vazia, a comparação direta é mais honesta 🙂

E se a string só tiver espaços em branco?

Aqui mora o bug clássico do formulário

O usuário aperta a barra de espaço três vezes e manda

Pra tua checagem, " " não é string vazia, é string com conteúdo, e passa direto

var teste = " "; console.log(teste === ""); // false console.log(!teste); // false

A solução é limpar as pontas antes de comparar, com o trim()

var teste = " "; console.log(teste.trim() === ""); // true

O trim() remove os espaços em branco das duas pontas e devolve uma NOVA string, sem alterar a original

Ou seja: se tu precisa do valor limpo depois, guarda o retorno numa variável, porque a variável antiga continua com os espaços lá

var teste = " com valor "; var limpo = teste.trim(); console.log(limpo); // "com valor" console.log(teste); // " com valor "

Tome cuidado! Chamar .trim() em null ou undefined estoura erro na hora

Então, se o dado vem de fora (API, input, banco), cheque a presença primeiro e só depois faça o trim

if (teste && teste.trim() === "") { console.log("Só tem espaço em branco aqui"); }

E dá pra usar polyfill? Não precisa: o trim() faz parte do padrão desde o ECMAScript 5 e a MDN classifica ele como recurso bem estabelecido, disponível nos navegadores desde julho de 2015

E quando eu quero limpar só um lado?

A linguagem tem os dois irmãos do trim(), que entraram no padrão no ECMAScript 2019:

‘ abc ‘.trimStart() devolve ‘abc ‘

‘ abc ‘.trimEnd() devolve ‘ abc’

O suporte nas engines é antigo: Chrome desde a versão 66, Firefox desde a 61, Safari desde a 12 e Node.js desde a versão 8

E aquele trimLeft() e trimRight() que tu vê em código velho?

São só apelidos legados, que constam no Anexo B da especificação como aliases de trimStart e trimEnd

Em código novo, usa trimStart e trimEnd e segue o baile

Vazio não é a mesma coisa que null ou undefined:

Esse é o detalhe que derruba muito código em produção

Uma string vazia é um valor, ela existe

Já null e undefined são a ausência do valor

E isso muda o comportamento do operador de coalescência nula (o ??), padronizado no ECMAScript 2020 junto com o encadeamento opcional (?.)

O ?? retorna o operando da direita SÓ quando o da esquerda é null ou undefined

var nome = ""; console.log(nome ?? "Visitante"); // "" (a string vazia passa!)

var nome2 = null; console.log(nome2 ?? "Visitante"); // "Visitante"

Ou seja: string vazia e 0 NÃO disparam o fallback do ??

Se o que tu quer é "qualquer coisa vazia vira o padrão", aí o caminho é o ||, que cai no falsy inteiro

console.log("" || "Visitante"); // "Visitante"

Dois operadores parecidos, comportamentos bem diferentes, escolhe pelo que tu considera vazio no teu sistema

Qual abordagem usar em cada caso:

Quero saber se é EXATAMENTE uma string sem nada dentro? Usa str === ""

Quero pegar qualquer ausência de valor (vazio, null, undefined, 0, NaN, false)? Usa !str

O campo pode vir com espaço em branco do usuário? Usa str.trim() === ""

O dado pode chegar como null ou undefined e eu ainda quero limpar as pontas? Cheque a presença antes: if (str && str.trim() === "")

Quero um valor padrão só quando for null ou undefined? Usa ?? (a string vazia passa)

Quero um valor padrão pra qualquer coisa vazia? Usa ||

Não existe uma "melhor", existe a que combina com o que o teu sistema considera vazio

Perguntas frequentes sobre string vazia em JavaScript (usar o conteúdo do bloco ‘faq’ desta proposta, cada pergunta como H3)

Eu gravei esse conteúdo em vídeo antes de escrever aqui, com a estrutura básica de HTML mais um arquivo JS separado, rodando num servidor local pra abrir a página no navegador

Criei duas variáveis: uma com texto e outra vazia

Aí testei os dois caminhos com o console aberto: primeiro a comparação com "", que só ativou o if da variável vazia, e depois o operador NOT na frente das duas, que inverteu o resultado exatamente como a lógica de falsy manda

O que ficou claro na prática é uma coisa: no console tu não enxerga a diferença entre a string vazia e a string com três espaços, as duas parecem idênticas ali na tela

É por isso que o bug de formulário passa batido, e é por isso que eu virei chato com trim()

O vídeo com esse teste está incorporado no começo do post, se tu preferir ver a tela rodando

Perguntas frequentes

Qual a diferença entre str === "" e !str?

O === "" é uma comparação estrita: só devolve true se o valor for exatamente uma string vazia

Já o !str devolve true pra qualquer valor falsy, e a string vazia é apenas um deles

Segundo a MDN, a lista completa de falsy é: false, 0, -0, 0n, "" (string vazia), null, undefined, NaN e document.all

Então !str também dispara pra null, undefined, 0 e NaN

Se o teu objetivo é ESPECIFICAMENTE string vazia, vai de === ""

Se é "não veio nada útil aqui", vai de !str

Como checar se uma string tem só espaços em branco?

Compare depois de limpar as pontas com trim():

var teste = " "; console.log(teste === ""); // false console.log(teste.trim() === ""); // true

O trim() remove o espaço em branco das duas pontas, então uma string composta só de espaços vira "" e cai na comparação

O trim() altera a string original?

Não

O trim() remove os espaços das duas pontas e retorna uma NOVA string, sem modificar a original

Se tu precisa do valor limpo depois, guarda o retorno: var limpo = teste.trim()

Preciso de polyfill pra usar o trim()?

Não

O String.prototype.trim() faz parte do padrão desde o ECMAScript 5 e a MDN classifica ele como recurso bem estabelecido, disponível nos navegadores desde julho de 2015

Qual a diferença entre trimStart e trimLeft?

Nenhuma no comportamento: trimLeft e trimRight constam no Anexo B da especificação como apelidos legados de trimStart e trimEnd

Os nomes oficiais são trimStart() e trimEnd(), que entraram no padrão no ECMAScript 2019

‘ abc ‘.trimStart() devolve ‘abc ‘ e ‘ abc ‘.trimEnd() devolve ‘ abc’

O suporte já é antigo: Chrome desde a versão 66, Firefox desde a 61, Safari desde a 12 e Node.js desde a versão 8

O operador ?? serve pra dar um valor padrão quando a string está vazia?

Não serve

O operador de coalescência nula (??), padronizado no ECMAScript 2020, retorna o operando da direita apenas quando o da esquerda é null ou undefined

String vazia e 0 não disparam o fallback:

console.log("" ?? "Visitante"); // "" console.log(null ?? "Visitante"); // "Visitante"

Se tu quer que a string vazia também caia no valor padrão, usa o || , que trabalha com a lista inteira de valores falsy

A string vazia é a mesma coisa que null em JavaScript?

Não

A string vazia é um valor que existe e tem tipo string, com comprimento zero

Já null e undefined representam a ausência de valor

Os três são falsy, então !valor pega os três, mas a comparação estrita separa: "" === null devolve false

Essa checagem mudou nas versões mais recentes do JavaScript?

A base continua igual

A edição vigente da especificação é o ECMAScript 2026, a 17ª edição, aprovada pela Ecma International em 30 de junho de 2026, e o texto oficial fica publicado pelo TC39 em tc39.es/ecma262/2026/

Comparar com "", usar a checagem falsy e limpar com trim() seguem sendo o caminho, e o que apareceu nos últimos anos (trimStart/trimEnd no ES2019, ?? e ?. no ES2020) só deixou o código mais curto

Leia também

Escrito por | Matheus Battisti

Matheus Battisti
Fundador da Hora de Codar

Programador apaixonado pelo mundo das tecnologias, sempre buscando em aprender e se aprofundar em linguagens, frameworks e o que mais for necessário para executar um bom trabalho. Agora tem uma nova missão que é de passar seu conhecimento adiante para formar novos programadores e especializar mais os que já são.

Subscribe
Notify of
guest

4 Comentários
Oldest
Newest Most Voted
danifreitasce

Obrigado! Tava precisando só de uma pequena luz. Estou apredendo JavaScritp

Battisti

de nada =)

CarolTeo

Obrigada demais, salvou meu projeto =)

Battisti

de nada =)

Formações

Formação Vibe Coding

Formação Vibe Coding

Do Prompt ao Produto: Crie Software Real com IA

  • 474 aulas
  • 20 projetos
  • 39h 27min

Blog | Mais populares