Erros de programação são inevitáveis. Mais cedo ou mais tarde, seu aplicativo apresentará algum comportamento inesperado. Como qualquer outra linguagem de programação, JavaScript gera erros quando algo dá errado em seu código.
Erros interrompem o fluxo normal de um aplicativo. Mas eles também ajudam a proteger seu aplicativo contra comportamentos imprevisíveis. Saber lidar com os erros corretamente é crucial.
Por que o tratamento de erros é importante?
O tratamento de erros contribui para uma melhor experiência do usuário. Você pode trocar os erros padrão e às vezes detalhados do JavaScript por mensagens de erro mais legíveis por você mesmo. Você pode lidar graciosamente com as causas de alguns erros e manter seu programa em execução em vez de encerrá-lo.
O tratamento de erros também é útil durante o desenvolvimento. Você pode pegar um erro de tempo de execução e fazer algo útil com ele, como registrá-lo no console do navegador. Isso é mais gracioso do que o erro causando uma falha e não saber onde ou por que o erro ocorreu.
Estrutura de erros internos de JavaScript
Os erros do JavaScript são objetos com três propriedades:
- nome: Este é o nome do erro. Por exemplo, um nome de variável ausente lançará um erro chamado SyntaxError.
- mensagem: Este é o corpo da mensagem e explica o erro textualmente.
- causa: você pode usar essa propriedade com erros personalizados para acompanhar a pilha de chamadas.
Tipos comuns de erro em JavaScript
Aqui estão alguns erros comuns encontrados em JavaScript.
Erro de sintaxe
Erros de sintaxe podem ocorrer quando o JavaScript tenta interpretar seu código. Ele irá gerar um erro se o seu código não estiver em conformidade com a sintaxe correta. Alguns erros comuns que podem gerar erros de sintaxe são:
- Nomes de variáveis ausentes.
- Falta “}” após uma função.
- Falta “)” após uma condição.
Erro de referência
Erros de referência ocorrem quando um programa tenta referenciar uma variável que está indisponível ou fora do escopo.
TypeError
JavaScript pode lançar um erro de tipo quando não pode executar uma operação porque o tipo que espera é diferente daquele que recebe.
Erro de URI
Este erro ocorre se você usar uma função de manipulação de URI global — como decodeURIComponent() — incorretamente. Como resultado, a codificação ou decodificação falha.
Erro Agregado
Este erro é usado para representar vários erros agrupados em um. Use-o quando quiser lançar muitos erros de uma só vez. Por exemplo, Promise.any() pode lançar um AggregateError() quando todas as promessas passadas a ele forem rejeitadas.
Erro interno
Um InternalError é gerado quando ocorre um erro dentro do mecanismo JavaScript.
Erro de intervalo
Algumas funções ditam o intervalo de valores que você pode passar como argumentos. Este erro ocorre quando você tenta passar um valor que não está incluído nesse intervalo.
Tratamento de erros com o Try... Bloco de captura
JavaScript fornece funcionalidade de manipulação de exceção integrada com o tentar... pegar... finalmente quadra. Também permite que você levante seus próprios erros usando o lançar operador.
Você pode usar um bloco try…catch para lidar com erros que ocorrem durante o tempo de execução. Você escreve um código válido que espera executar corretamente no bloco try. No bloco catch, você pode escrever código de tratamento de erros.
tentar {
// Código Javascript válido
} truque (erro) {
//Trata o erro
} finalmente {
// Executado mesmo quando ocorre um erro
}
O bloco catch é ignorado se o código no bloco try não gerar nenhum erro. Se ele gerar um erro, a execução salta para o bloco catch. O código no bloco finally é executado independente de ocorrer um erro ou não. Este bloco não é obrigatório, então omita-o se não precisar dele.
O código que você inclui no bloco try deve ser válido. Se não for, o JavaScript lançará um erro de análise.
Vejamos um exemplo prático:
tentar {
console.log (texto)
} truque (erro) {
console.registro(erro.mensagem)
} finalmente {
console.log("Será executado independentemente")
}
Este programa tenta registrar o valor da variável de texto. Como essa variável não está definida, o programa lançará um erro. Este erro é impresso no console no bloco catch. O bloco finally é executado e imprime uma mensagem própria.
Erro de referência: o texto não está definido
Será executado independentemente
Em situações em que você precisa gerar seu próprio erro, use o lançar operador.
Considere este exemplo que gera um erro se os dados forem falsos:
const dados = getDados()
tentar {
if (!dados) {
lançar "Sem dados"
}
console.log (dados)
// Prosseguir
} truque(erro) {
console.log (erro) // "Sem dados"
}
Neste exemplo, o programa chama a função getData() e atribui seu resultado à variável data. No bloco try, o bloco gera um erro personalizado se os dados estiverem vazios. O bloco catch captura esse erro e o registra no console.
Lançar erros é muito benéfico durante o desenvolvimento. Você pode usar a mensagem de erro personalizada para entender por que seu aplicativo não está funcionando conforme o esperado.
Como este exemplo demonstra, você pode usar uma string para o objeto de erro. Você pode realmente lançar qualquer expressão JavaScript como um erro. No entanto, por uma questão de consistência com erros internos, use um objeto JavaScript contendo um nome e uma mensagem.
lançar {
nome: "Nome do erro",
mensagem: "Mensagem de erro"
}
Você também pode usar os construtores internos do JavaScript ao gerar erros. Esses construtores incluem Error, SyntaxError e ReferenceError, entre outros.
Para lançar um erro usando o construtor Error, use este código:
lançarnovoErro("Sem dados")
Agora você pode fazer referência ao nome e à mensagem.
console.log (erro.nome) // Erro
console.log (erro.mensagem) // Sem dados
Estendendo o objeto de erro JavaScript
Uma classe de erro personalizada é útil ao lidar com erros que não correspondem aos objetos já fornecidos pelo JavaScript. Por exemplo, talvez você queira isolar um erro de validação de dados como um tipo específico chamado ValidationError.
Você pode usar um Classe JavaScript ES2015 para criar uma classe de erro personalizada.
classeErro de validaçãoestendeErro{
construtor(mensagem) {
super(mensagem);
this.name = "Erro de validação";
}
}
Lance um erro usando a classe ValidationError assim:
lançarnovo ValidationError("Sua mensagem de erro")
O erro lançado será um objeto com os valores de nome e mensagem.
{
nome: "Erro de validação",
mensagem: "Sua mensagem de erro"
}
Erros existem para ajudar
O tratamento de erros é uma parte fundamental da programação, qualquer que seja a linguagem que você esteja usando. JavaScript tem um ótimo suporte para gerar e capturar erros no estilo de exceções. Ele também possui vários tipos de erro integrados que você pode manipular e usar para seus próprios casos.
Alguns erros, como erros de sintaxe, podem não ser detectados quando você está escrevendo JavaScript no “modo desleixado”. O uso do modo estrito permite que o JavaScript detecte erros que, de outra forma, seriam ignorados.