Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

[Dúvida] Natureza dos tipos de erro

Sobre os tipos de ERROR disponíveis em JS, quando eu defino RangeError e adiciono uma mensagem, ou quando defino um Error e adiciono uma mensagem, o interpretador não diferencia um tipo de erro do outro? Os tipos de erro, nesse caso, seriam apenas uma espécie de rastreabilidade, uma vez que, no código, eu mesmo tenha definido quando um ou outro devam ocorrer em determinadas linhas do código?

Exemplo

linha 12 throw new RangeError ("deu um problema aqui!"); // se eu trocar RangeError por Error , o resultado seria o mesmo?

2 respostas
solução!

Olá, Jefferson, como vai?

Em JavaScript, os tipos de erro (como RangeError, TypeError, SyntaxError, etc.) são classes de erro pré-definidas que herdam de Error. A diferença principal está na semântica e na organização do código, não no comportamento padrão do interpretador.

Quando você usa throw new RangeError("mensagem") ou throw new Error("mensagem"), o mecanismo de lançamento e captura do erro funciona da mesma forma. A distinção entre os tipos é útil para:

  • Rastreabilidade: Identificar a categoria do erro (ex: RangeError para valores fora do intervalo esperado).
  • Controle de fluxo: Capturar erros específicos com catch se necessário.

Por exemplo:

// Exemplo com RangeError
function calcularRaizQuadrada(num) {
  if (num < 0) throw new RangeError("Número não pode ser negativo");
  return Math.sqrt(num);
}

// Exemplo com Error genérico
function dividir(a, b) {
  if (b === 0) throw new Error("Divisão por zero");
  return a / b;
}

try {
  calcularRaizQuadrada(-1);
} catch (e) {
  if (e instanceof RangeError) {
    console.log("Erro de intervalo:", e.message);
  } else {
    console.log("Erro genérico:", e.message);
  }
}

Se você substituir RangeError por Error no primeiro exemplo, o código continuará funcionando, mas perderá a semântica específica do tipo de erro.

Espero ter ajudado!

Siga firme nos seus estudos e conte com o fórum sempre que precisar.

Abraços :)

Caso este post tenha lhe ajudado, por favor, marcar como solucionado

Perfeito! Muito obrigado, foi bastante esclarecedor.