Objetivos
        
    
    
    
        
Manipulando error
    
    
        
            
                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. 
            
         
     
    
        
Error
    
    
        
            
                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)
         
     
    
        Capturando um ou mais erros
        
     
    
        
            
                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)
            
            
         
     
    
        Histórico de atualizações
        
     
    
        
            
                - 18/08/2025 - revisão 3 - Ajustes: pontuais, exemplos e sintaxes
 
                - 25/09/2024 - revisão 2 - Remoção: 'Exemplos' em intro, link 'Gerenciando Memória.'; Correção: 'lançando'/'relançando'
 
                - 06/10/2023 - revisão 1 - Correção navegação, layout e erros gramaticais
 
                - 31/05/2023 - versão inicial
 
            
         
     
    
            
            
                
                    
                    Os cursos oferecidos nesta página são cursos fornecidos por parceiros. Ao comprar um curso clicando
                em seu banner, você está ajudando a manter o projeto TutorialDev vivo. Os sites dos cursos parceiros utilizam cookies.