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

  1. Entender o bloco try-catch
  2. Entender o bloco finally
  3. Múltiplos catchs
  4. Catch genérico
  5. console.error
  6. uso do try-catch

O gerenciamento de erros em JavaScript, de forma semelhante a outras linguagens como C# e Java que utilizam o bloco de teste de código try/catch/finally para testar, tratar erros e liberar recursos.

O bloco-try é utilizado para agrupar os trechos de código que serão executados em um programa. Caso algum erro ocorra, um objeto do tipo de dado Error, contendo informações sobre o erro ocorrido, será "lançado" pelo bloco-try.

Sintaxe
try
{
 //código para executar
}
//catch omitido

O bloco catch é utilizado para agrupar os trechos de código que são responsáveis pelo tratamento dos erros "lançados" pelo bloco-try. Um ou mais erros podem ser "capturados" pelo catch.

Sintaxe
try
{
 //código para executar
}
catch( err )
{
    //tratamento
}
Onde
err: Objeto que contém informações do erro ocorrido

Tanto o bloco-try quanto catch vistos nos exemplos devem sempre "andar" juntos. O bloco finally pode ou não ser utilizado.

Exemplo 1
try
{
    //código para executar
}
catch( err )
{
    //código para tratar erros
}

No exemplo 2 abaixo, vamos executar um trecho de código com o tratamento de erros sem utilizar o bloco try-catch.

Exemplo 2
funcao_inexistente();
Saída
index.js:1
funcao_inexistente();
^
ReferenceError: funcao_inexistente is not defined

No exemplo 3, abaixo vamos executar um trecho de código com o tratamento de erros utilizando os blocos try-catch.

Exemplo 3
try
{
    funcao_inexistente();
}
catch(erro) 
{
    console.log("ocorreu um erro");
}
Saída
ocorreu um erro

Além dos blocos de código try-catch há outros bloco de código, não obrigatório, chamado finally que é executado independente de terem sido executados ocorridos erros no bloco try e tratados no bloco catch.

Sintaxe
try {
  //corpo
}
catch(erro) {
  //corpo
}
finally {
  //corpo
}

O finally pode ser utilizado para finalizar ou resetar variáveis, liberar objetos ou estrutura de dados dinâmicas instanciadas, arquivos e outros.

Exemplo 4
obj = {
  nome: "fulano",
  metodo1: function(){
    console.log("executando metodo1");
  }
}

try {
  obj.metodo1();
}
catch(e) {
  console.log("ocorreu um erro");
}
finally {
  obj = null;
  console.log("objeto liberado");
}
Saída
executando metodo1
ocorreu um erro
objeto liberado

Para ver o básico que foi estudado sobre gerenciamento de memória, visite JavaScript Básico: Gerenciando Memória.

Em JS não podemos declarar múltiplos blocos catch como em outras linguagens. Para tratamento de mais de um tipo de erro, precisamos utilizar o comando de decisão if-else-if em conjunto do operador instanceof:

Sintaxe
try
{
 //código para executar
}
catch( erro )
{
    if( erro == instanceof tipo_erro1){
        //tratamento
    }
    else if ( erro == instanceof tipo_erro2){
        //tratamento
    }
    else{
        //tratamento
    }
}
Exemplo 5
obj = {
  nome: "fulano",
  metodo1: function(){
    console.log("executando metodo1");
  }
}
try {
  obj.metodo2(); //métodos não existe/definido
}
catch(e) {
  if( e instanceof TypeError)
    console.error("método1 não definido")
  else{
      console.error("outro erro",e.message)
  }
}
Saída
método1 não definido

Caso as informações do erro ocorrido no bloco try seja tratado de forma genérica, podemos omitir o objeto passado como argumento para o bloco catch.

Sintaxe
try{
     //código para executar
}
catch{
     //tratamento
}
Exemplo 5
obj = {
  nome: "fulano",
}

try {
  obj.metodo1(); //métodos não existe/definido
}
catch {
     console.error("tratamento genérico")
}
Saída
tratamento genérico
  1. 18/08/2025 - revisão 3 - Ajustes: pontuais, exemplos e sintaxes; Adição: catch genérico
  2. 25/09/2024 - revisão 2 - Ajustes pontuais
  3. 06/10/2023 - revisão 1 - Correção navegação, layout e erros gramaticais
  4. 31/05/2023 - versão inicial