undefined em JavaScript: 5 maneiras de verificar (e qual escolher)

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

«Uncaught ReferenceError» — seu primeiro inimigo? Aprendendo a verificar corretamente undefined em JavaScript

\n\n

Todo mundo que escreveu pelo menos algumas linhas em JavaScript já encontrou o misterioso undefined. Não é apenas um "espaço vazio" — é um tipo de dado completo com seu próprio valor. Mas como capturá-lo corretamente? Se você pesquisou "How can I check for undefined in JavaScript", não está sozinho: esta pergunta no Stack Overflow tem centenas de milhares de visualizações. O problema é que em JS existem várias maneiras de verificar, e cada uma tem suas armadilhas.

\n\n

Neste artigo, vamos analisar 5 abordagens, do simples ao complexo, comparar seu desempenho e confiabilidade, e descobrir qual método usar em 2025. Vamos lá!

\n\n

O que é undefined na verdade?

\n\n

Antes de verificar, vamos definir os termos. undefined é um valor primitivo que é atribuído a uma variável se ela foi declarada, mas não inicializada:

\n\n
let a;\nconsole.log(a); // undefined\n
\n\n

Importante: undefined ≠ null ≠ not defined. null é um "nada" intencional, enquanto not defined (ReferenceError) ocorre quando a variável nem foi declarada. Essas nuances são críticas para escolher a verificação correta.

\n\n

Método nº1: Operador typeof — o padrão ouro?

\n\n

A maneira mais popular e segura é usar typeof:

\n\n
if (typeof x === 'undefined') {\n  console.log('x não está definido');\n}\n
\n\n

Por que isso funciona mesmo para variáveis não declaradas? typeof nunca lança um ReferenceError. Se a variável não existe, ele simplesmente retorna a string "undefined".

\n\n

Prós:

\n
    \n
  • Seguro para variáveis não declaradas
  • \n
  • Código legível e compreensível
  • \n
  • Funciona em todos os navegadores e ambientes (Node.js, Deno)
  • \n
\n\n

Contras:

\n
    \n
  • Um pouco longo para uso frequente
  • \n
  • Pode enganar iniciantes (comparação de strings)
  • \n
\n\n

Veredito: Melhor escolha para verificações globais e casos onde a variável pode não estar declarada.

\n\n

Método nº2: Comparação estrita com undefined (===)

\n\n

A segunda maneira mais popular é comparar o valor diretamente:

\n\n
if (x === undefined) {\n  console.log('x é igual a undefined');\n}\n
\n\n

Aqui há uma nuance: a variável deve estar declarada. Se x não existir, você receberá um ReferenceError. Portanto, esse código é seguro apenas para:

\n
    \n
  • Propriedades de objetos (obj.prop === undefined)
  • \n
  • Parâmetros de funções
  • \n
  • Variáveis declaradas com let, const ou var
  • \n
\n\n

Armadilha: undefined global

\n

Em navegadores antigos (IE 8 e anteriores), undefined podia ser sobrescrito:

\n
undefined = 'agora sou uma string'; // Pesadelo!\n
\n

Isso não é mais possível (no modo estrito), mas se você suporta código legado — é melhor usar typeof.

\n\n

Veredito: Excelente método para variáveis locais e propriedades de objetos. Rápido e conciso.

\n\n

Método nº3: Operador void

\n\n

Uma maneira pouco conhecida, mas elegante, é void 0:

\n\n
if (x === void 0) {\n  console.log('x undefined');\n}\n
\n\n

O operador void avalia uma expressão e retorna undefined. void 0 é a maneira mais curta de obter um undefined puro, independente da variável global.

\n\n

Quando é útil?

\n
    \n
  • Em código minificado (economiza bytes)
  • \n
  • Em bibliotecas onde a proteção contra sobrescrita de undefined é importante
  • \n
  • Em programação funcional (por exemplo, em cadeias de promises)
  • \n
\n\n

Contra: Parece estranho

Blogs

Book Recommendations