Clique sobre os tópicos listados abaixo para navegar até o conteúdo desejado.

  1. Entender o tipo Error
  2. Recuperar informações
  3. Capturar mais de um erro
  4. Lançando um erro
  5. Relançando erro
  6. Entender o Stack Trace
  7. Lista de erros mais comuns

Nesta parte do tutorial vamos estudar a classe Error que representa erros ocorridos durante a execução de nossos programas em JavaScript. Vamos estudar sobre o tipo Error, como capturar erros, como recuperar informações de erro e stacktrace.

Um Error, é um evento ou acontecimento não desejado que pode ocorrer durante a execução de nossos programas como, por exemplo, erros de acesso a memória, falhas ao abrir um arquivo e outros.

Quando esse tipo de evento acontece, um objeto de um tipo de Error, é "lançado" para que haja o conhecimento do evento e que seu tratamento seja feito. Esse objeto contém as informações sobre o erro.

Quando um erro ocorre e precisamos obter algumas informações básicas como a mensagem do erro ou onde o erro ocorreu. Para isso utilizamos as propriedades da classe Error abaixo:

Propriedade Descrição
cause Retorna uma string contendo a causa do erro
columnNumber -
fileName Retorna uma string contendo nome do arquivo fonte
message Retorna um string contendo mensagem de erro
stack Retorna um string contendo a pilha de execução
Exemplo 1
try
{
    funcao_inexistente();
}
catch(erro) 
{
    console.log("cause:",erro.cause);
    console.log("message:",erro.message);
    console.log("stack:",erro.stack);
}
Saída
cause: undefined
message: funcao_inexistente is not defined
stack: ReferenceError: funcao_inexistente is not defined
    at Object.<anonymous> (/runtime/javascript/index.js:3:5)

Em JavaScript, diferente de outras linguagens que possuem o bloco try/catch, não permite que haja mais de um catch. Para que a captura de mais de um erro seja feita, precisamos utilizar if-else e o operador instanceof.

Exemplo 2
try
{
      funcao1();
}
catch(erro)
{
  if(erro instanceof ReferenceError){
    console.log(erro.message);
  }
  else if ( error instanceof TypeError){
    //tratamento
  }
}
Saída
funcao1 is not defined

Os comandos de decisão podem ser vistos em JavaScript Básico: Comandos de decisão.

Para lançarmos um tipo de Error explicitamente em nossos programas em JS, utilizamos o comando throw em conjunto de uma instância da tipo de error.

Exemplo 3
try
{
    throw Error("erro desconhecido");
}
catch(erro)
{
    console.log(erro.message);
}
Saída
erro desconhecido

Em alguns momentos, o tratamento de um erro não ser tratado em seu respectivo bloco catch. Nesse caso, podemos relançar um erro, para um escopo acima do atual, utilizado também o comando throw.

Sintaxe
try{
    //omitido
}
catch( variavel_erro ){

    throw variavel_erro;
}
Exemplo 4
function funcao1()
{
    throw Error("erro desconhecido em funcao1");
}
function funcao2()
{
  try
  {
        funcao1();
  }
  catch(erro)
  {
      throw erro;
  }  
}
function funcao3()
{
  try
  {
      funcao2();
  }
  catch(erro)
  {
      console.log(erro.message);
  }  
}

funcao3();
Saída
erro desconhecido em funcao1

Caso uma nova exceção seja lançada ou invés de relançada, as informações do stacktrace referentes ao erro serão perdidos, "mascarando" o erro.

O Stacktrace armazena todas as chamadas à funções feitas em nossos programas até a linha em que um erro. Por ser uma Stack(Pilha) as chamadas são armazenadas umas sobres as outras sendo a linha que lançou um erro a última.

Exemplo 5
function funcao1()
{
    throw Error("erro desconhecido em funcao1");
}
function funcao2()
{
  try
  {
        funcao1();
  }
  catch(erro)
  {
      throw erro;
  }  
}

function funcao3()
{
  try
  {
      funcao2();
  }
  catch(erro)
  {
      console.log(erro.stack);
  }  
}

funcao3();
Saída
ReferenceError: funcao_inexistente is not defined
    at funcao2 (/runtime/javascript/index.js:2:3)
    at funcao1 (/runtime/javascript/index.js:6:3)
    at principal (/runtime/javascript/index.js:12:7)

  1. 18/08/2025 - revisão 3 - Ajustes: pontuais, exemplos e sintaxes
  2. 25/09/2024 - revisão 2 - Remoção: 'Exemplos' em intro, link 'Gerenciando Memória.'; Correção: 'lançando'/'relançando'
  3. 06/10/2023 - revisão 1 - Correção navegação, layout e erros gramaticais
  4. 31/05/2023 - versão inicial