«Uncaught ReferenceError» — seu primeiro inimigo? Aprendendo a verificar corretamente undefined em JavaScript
\n\nTodo 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.
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\nO que é undefined na verdade?
\n\nAntes 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:
let a;\nconsole.log(a); // undefined\n\n\nImportante: 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.
Método nº1: Operador typeof — o padrão ouro?
\n\nA maneira mais popular e segura é usar typeof:
if (typeof x === 'undefined') {\n console.log('x não está definido');\n}\n\n\nPor 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".
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
Contras:
\n- \n
- Um pouco longo para uso frequente \n
- Pode enganar iniciantes (comparação de strings) \n
Veredito: Melhor escolha para verificações globais e casos onde a variável pode não estar declarada.
\n\nMétodo nº2: Comparação estrita com undefined (===)
\n\nA segunda maneira mais popular é comparar o valor diretamente:
\n\nif (x === undefined) {\n console.log('x é igual a undefined');\n}\n\n\nAqui 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,constouvar\n
Armadilha: undefined global
\nEm navegadores antigos (IE 8 e anteriores), undefined podia ser sobrescrito:
undefined = 'agora sou uma string'; // Pesadelo!\n\nIsso não é mais possível (no modo estrito), mas se você suporta código legado — é melhor usar typeof.
Veredito: Excelente método para variáveis locais e propriedades de objetos. Rápido e conciso.
\n\nMétodo nº3: Operador void
\n\nUma maneira pouco conhecida, mas elegante, é void 0:
if (x === void 0) {\n console.log('x undefined');\n}\n\n\nO 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.
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
Contra: Parece estranho