O erro TypeError: Cannot read property 'X' of undefined
ocorre quando você tenta acessar uma propriedade de um objeto que está undefined
. Isso pode acontecer se você estiver tentando acessar uma propriedade sem verificar se o objeto foi inicializado corretamente.
Exemplo de erro:
let obj;
console.log(obj.name); // TypeError: Cannot read property 'name' of undefined
Aqui, a variável obj
não foi inicializada, e ao tentar acessar a propriedade name
, o JavaScript lança um erro.
Exemplo corrigido:
let obj = { name: 'John' };
console.log(obj.name); // John
Neste exemplo, obj
é corretamente inicializado com um valor, e a propriedade name
pode ser acessada sem problemas.
Como corrigir?
Sempre que for acessar uma propriedade de um objeto, verifique primeiro se o objeto está definido. Uma prática recomendada é usar uma verificação antes de acessar a propriedade ou utilizar o encadeamento opcional (?.
).
let obj;
console.log(obj?.name); // undefined, mas sem erro
O encadeamento opcional impede que o erro seja lançado caso o objeto seja undefined
.
Como evitar o erro TypeError: Cannot read property 'X' of undefined em objetos
Essa é uma falha comum em JavaScript ao trabalhar com objetos e variáveis dinâmicas. Quando você recebe dados de uma API, por exemplo, sempre use verificações para garantir que os objetos e suas propriedades estejam definidos antes de acessá-los.
Algumas aplicações:
- Verifique se o objeto não é
undefined
ounull
antes de acessar suas propriedades. - Use encadeamento opcional para acessar propriedades de objetos que podem não estar definidos.
- Implemente uma validação robusta ao trabalhar com dados externos ou variáveis dinâmicas.
Dicas para quem está começando
- Antes de acessar uma propriedade, sempre verifique se o objeto foi inicializado corretamente.
- Utilize o encadeamento opcional para tornar seu código mais seguro ao lidar com valores indefinidos.
- Se você estiver manipulando dados externos, sempre faça validações para garantir que os objetos existem antes de usá-los.

João Gutierrez
Desenvolvedor e arquiteto de software com ampla atuação em PHP, Node.js e Python.
Mais sobre o autor