JavaScript

Erros comuns em JavaScript que iniciantes cometem

Pare de cometer os mesmos equívocos. Veja os erros comuns em JavaScript que iniciantes cometem e domine a arte de programar sem falhas. Clique e evolua!

Pedro Mendes
Pedro Mendes
26 de março de 2026 4 min de leitura
Erros comuns em JavaScript que iniciantes cometem

Erros comuns em JavaScript que iniciantes cometem

Erros comuns em JavaScript que iniciantes cometem

Aprender JavaScript é uma jornada empolgante, mas é natural encontrar alguns obstáculos no caminho. Muitos desenvolvedores iniciantes se deparam com padrões de erro que podem atrasar o progresso. Conhecer os erros comuns em JavaScript que iniciantes cometem é crucial para desenvolver um código mais robusto e eficaz. Neste artigo, abordaremos os equívocos mais frequentes e como evitá-los.

1. Confusão entre `==` e `===`

O operador de igualdade abstrata (==) realiza coerção de tipo antes da comparação, o que pode levar a resultados inesperados. Já o operador de igualdade estrita (===) compara tanto o valor quanto o tipo, sem coerção. Priorize === para evitar comportamentos ambíguos e garantir maior previsibilidade no seu código.

Exemplo:


console.log(0 == false);    // true (coerção de tipo)
console.log(0 === false);   // false (tipos diferentes)

console.log('10' == 10);    // true
console.log('10' === 10);   // false

2. Entendimento do Escopo e Hoisting (`var`, `let`, `const`)

Antes do ES6, var era comum, com escopo de função e comportamento de hoisting que podia causar surpresas ao mover declarações para o topo do seu escopo. let e const, introduzidos no ES6, oferecem escopo de bloco e são a escolha preferencial para declarar variáveis e constantes, respectivamente, minimizando erros relacionados ao escopo e ao hoisting.

Exemplo Incorreto (com `var`):


for (var i = 0; i < 3; i++) {
  setTimeout(() => console.log(i), 100);
}
// Saída: 3, 3, 3 (após 100ms, pois 'i' é a mesma variável global/função)

Exemplo Correto (com `let`):


for (let i = 0; i < 3; i++) {
  setTimeout(() => console.log(i), 100);
}
// Saída: 0, 1, 2 (pois 'let' cria um novo 'i' para cada iteração do bloco)

3. Lidar com Código Assíncrono Incorretamente

JavaScript é síncrono por natureza, mas muitas operações (como requisições de API, timers) são assíncronas. Iniciantes frequentemente tratam essas operações como síncronas, o que resulta em variáveis indefinidas ou lógicas quebradas. Usar Promises, e a sintaxe async/await é essencial para gerenciar o fluxo de código assíncrono de forma mais legível e eficiente.

Exemplo Incorreto:


let dados;
fetch('https://api.exemplo.com/data')
  .then(res => res.json())
  .then(data => { dados = data; });
console.log(dados); // undefined (a operação 'fetch' ainda não terminou)

Exemplo Correto (usando `async/await`):


async function buscarDados() {
  try {
    const response = await fetch('https://api.exemplo.com/data');
    const dados = await response.json();
    console.log(dados); // Dados carregados com sucesso após a espera
  } catch (error) {
    console.error('Erro na requisição:', error);
  }
}
buscarDados();

4. O Contexto Esquisito de `this`

O valor da palavra-chave this é dinâmico e depende de como a função é invocada. Em funções regulares (não arrow functions), this pode se referir ao objeto global (window no navegador, undefined em modo estrito) ou ao objeto que a invoca. Arrow functions são mais previsíveis, pois herdam o this do seu escopo léxico (o que a define).

Exemplo Incorreto:


const usuario = {
  nome: 'Pedro',
  saudacao: function() {
    setTimeout(function() {
      console.log('Olá, ' + this.nome); // 'this' não é 'usuario' aqui, é o objeto global
    }, 100);
  }
};
usuario.saudacao(); // Olá, undefined

Exemplo Correto (com Arrow Function):


const usuario = {
  nome: 'Pedro',
  saudacao: function() {
    setTimeout(() => { // Arrow function mantém o 'this' de 'saudacao'
      console.log('Olá, ' + this.nome);
    }, 100);
  }
};
usuario.saudacao(); // Olá, Pedro

5. Modificar um Array Enquanto o Itera

Alterar o tamanho de um array (adicionar/remover elementos) enquanto você o percorre com um loop pode levar a comportamentos imprevisíveis, como pular elementos ou criar loops infinitos devido à mudança do índice e do comprimento do array. Prefira métodos imutáveis como filter(), map(), ou reduce() para gerar novos arrays, ou itere de trás para frente se a modificação in-place for estritamente necessária.

Exemplo Incorreto:


const itens = [1, 2, 3, 4, 5];
for (let i = 0; i < itens.length; i++) {
  if (itens % 2 === 0) {
    itens.splice(i, 1); // Remove um item, mas 'i' continua avançando, pulando o próximo
  }
}
console.log(itens); // [1, 3, 5] (o número 4 foi pulado na verificação)

Exemplo Correto (usando `filter`):


const itens = [1, 2, 3, 4, 5];
const itensFiltrados = itens.filter(item => item % 2 !== 0);
console.log(itensFiltrados); // [1, 3, 5]

Conclusão

Reconhecer e entender os erros comuns em JavaScript que iniciantes cometem é um passo vital para se tornar um desenvolvedor mais proficiente. A prática constante, a leitura de documentação e a análise de código são seus maiores aliados. Encare cada erro como uma oportunidade de aprendizado e continue explorando o vasto universo do JavaScript com confiança!

Pedro Mendes

Sobre Pedro Mendes

Desenvolvedor full stack com foco em aplicações web, automação e entrega confiável de software.

Ver mais artigos