Como verificar se uma variável existe em JavaScript: guia completo

Treinador Online de Python para Iniciantes

Aprenda Python facilmente sem sobrecarga teórica. Resolva tarefas práticas com verificação automática e escreva código diretamente no navegador.

Start Course

A variável existe, mas parece que não? Entendendo as verificações em JavaScript

\n\n

Você já escreveu um script, o executou, e de repente — bum! — o console do navegador fica vermelho com o grito Uncaught ReferenceError: myVar is not defined? Familiar. Ou o contrário: a variável foi declarada, mas você não tem certeza se um valor foi atribuído a ela. Em JavaScript, esses dois conceitos ("existe" e "inicializada") são frequentemente confundidos até mesmo por desenvolvedores experientes.

\n\n

Neste guia, vamos entender de uma vez por todas como verificar corretamente se uma variável existe em JavaScript, qual a diferença entre "definida" e "inicializada", e como evitar 90% dos erros relacionados a undefined e ReferenceError. Vamos lá!

\n\n

Resumindo: o que significa "a variável existe"?

\n\n

Em JavaScript, uma variável tem três estados:

\n\n
    \n
  • Não declarada (undeclared) — a variável simplesmente não existe na memória. Tentar acessá-la resultará em ReferenceError.
  • \n
  • Declarada, mas não inicializada (declared, but undefined) — escrevemos let x; ou var y;, mas não atribuímos um valor. A variável existe, seu tipo é undefined.
  • \n
  • Declarada e inicializada (declared and initialized) — a variável tem um valor específico (número, string, objeto, etc.).
  • \n
\n\n

A maioria das perguntas no Stack Overflow (e são milhares) se resume a uma: "Como saber se uma variável não causará um erro ao ser acessada?" A resposta — use typeof. Mas há nuances. Vamos entender.

\n\n

Método nº1. Operador typeof — seu melhor amigo

\n\n

A maneira mais segura e confiável de verificar se uma variável está definida em JavaScript é o operador typeof. Sua principal vantagem: ele nunca lança um erro, mesmo que a variável não seja declarada.

\n\n

Exemplo para variável não declarada

\n\n
// A variável myVar não foi declarada\nif (typeof myVar !== 'undefined') {\n    console.log('A variável existe!');\n} else {\n    console.log('A variável NÃO existe ou seu valor é undefined');\n}\n// Saída: "A variável NÃO existe ou seu valor é undefined"
\n\n

Observe: typeof retorna a string 'undefined' tanto para uma variável não declarada quanto para uma declarada, mas não inicializada (let x;). Isso é bom e ruim. Bom — porque não pegamos um erro. Ruim — porque não diferenciamos esses dois casos.

\n\n

Exemplo para variável declarada, mas vazia

\n\n
let myVar; // declarada, mas não inicializada\nconsole.log(typeof myVar); // "undefined" — também undefined!\n\nif (typeof myVar !== 'undefined') {\n    console.log('A variável existe e tem um valor');\n} else {\n    console.log('A variável é undefined (ou não foi declarada, ou não foi inicializada)');\n}
\n\n

Conclusão: typeof é a solução ideal se você precisa apenas evitar o ReferenceError. Se precisar distinguir entre "não declarada" e "vazia" — continue lendo.

\n\n

Método nº2. Verificação via window (contexto global)

\n\n

Se você está trabalhando no navegador e a variável foi declarada globalmente (via var ou implicitamente), ela se torna uma propriedade do objeto window. Isso abre possibilidades adicionais para verificar a existência da variável.

\n\n

Usando o operador in

\n\n
// Variável global\nvar globalVar = 42;\n\nconsole.log('globalVar' in window); // true\nconsole.log('nonExistentVar' in window); // false
\n\n

Este método funciona apenas para variáveis globais declaradas com var ou atribuídas sem palavra-chave. let e const não criam propriedades do objeto window (elas vivem no escopo de bloco).

\n\n

Uso

Blogs

Book Recommendations