O objeto Error: mais detalhes sobre o que deu errado

Descubra como o objeto Error fornece informações valiosas para depuração.

Quando algo falha no JavaScript, o sistema gera um “relatório” do problema.
Esse relatório é o objeto Error.

Pense no Error como um boletim de ocorrência do seu código:
ele diz o que aconteceu, onde aconteceu e ajuda você a corrigir mais rápido.


O que é o objeto Error?

Error é um objeto nativo do JavaScript usado para representar falhas.

Você pode:

  • receber erros automaticamente (quando algo quebra),
  • ou criar erros manualmente com new Error(...).

Exemplo:

const erro = new Error("Algo deu errado");
console.log(erro);

Propriedades mais úteis

error.name

Mostra o tipo do erro (ex.: Error, TypeError, ReferenceError).

error.message

Mostra a mensagem explicando a falha.

error.stack

Mostra o “caminho” de chamadas até o erro (stack trace).

Exemplo:

try {
  throw new Error("Falha ao salvar usuário");
} catch (erro) {
  console.log("name:", erro.name);
  console.log("message:", erro.message);
  console.log("stack:", erro.stack);
}

Criando erros personalizados com throw

Você pode validar regras e lançar erro quando necessário:

function cadastrarIdade(idade) {
  if (idade < 18) {
    throw new Error("Idade mínima é 18");
  }
  return "Cadastro permitido";
}

Isso ajuda a deixar regras de negócio mais claras.


Tipos nativos de erro (filhos de Error)

Além de Error, existem tipos específicos:

  • TypeError
  • ReferenceError
  • SyntaxError
  • RangeError
  • URIError

Exemplo:

throw new TypeError("Esperado texto, mas veio número");

Usar tipo específico facilita o diagnóstico.


Tratamento por tipo de erro

Você pode tratar de formas diferentes no catch:

try {
  throw new TypeError("Formato inválido");
} catch (erro) {
  if (erro instanceof TypeError) {
    console.log("Erro de tipo:", erro.message);
  } else {
    console.log("Outro erro:", erro.message);
  }
}

Criando sua própria classe de erro (nível intermediário)

Quando o projeto cresce, pode fazer sentido criar erros personalizados:

class ValidacaoError extends Error {
  constructor(message) {
    super(message);
    this.name = "ValidacaoError";
  }
}

try {
  throw new ValidacaoError("E-mail obrigatório");
} catch (erro) {
  console.log(erro.name);    // ValidacaoError
  console.log(erro.message); // E-mail obrigatório
}

Boas práticas com Error

  • Use mensagens claras e objetivas.
  • Não esconda erro silenciosamente.
  • Use try...catch onde há risco real (parse, API, validação).
  • Para o usuário: mensagem amigável.
  • Para você/dev: detalhes técnicos no log.

Resumo da lição

  • O objeto Error traz contexto sobre falhas no código.
  • Propriedades importantes: name, message, stack.
  • throw new Error(...) permite criar erros de forma controlada.
  • Tipos específicos e erros personalizados ajudam a depurar melhor.