ES6 - Tratamento de Erros
Existem três tipos de erros de programação: Erros de sintaxe, Erros de tempo de execução e Erros lógicos.
Erros de sintaxe
Erros de sintaxe, também chamados de parsing errors, ocorrem em tempo de compilação em linguagens de programação tradicionais e em tempo de interpretação em JavaScript. Quando ocorre um erro de sintaxe em JavaScript, apenas o código contido no mesmo encadeamento do erro de sintaxe é afetado e o restante do código em outros encadeamentos é executado, presumindo que nada neles dependa do código que contém o erro.
Erros de tempo de execução
Erros de tempo de execução, também chamados exceptions, ocorrem durante a execução (após a compilação / interpretação). As exceções também afetam o encadeamento em que ocorrem, permitindo que outros encadeamentos JavaScript continuem a execução normal.
Erros Lógicos
Os erros lógicos podem ser o tipo de erro mais difícil de rastrear. Esses erros não são o resultado de uma sintaxe ou erro de tempo de execução. Em vez disso, eles ocorrem quando você comete um erro na lógica que orienta seu script e não obtém o resultado esperado.
Você não pode detectar esses erros, porque isso depende de seus requisitos de negócios, que tipo de lógica você deseja colocar em seu programa.
JavaScript lança instâncias do objeto Error quando ocorrem erros de tempo de execução. A tabela a seguir lista os tipos predefinidos do objeto Error.
Sr. Não | Objeto de erro e descrição |
---|---|
1 | EvalError Cria uma instância que representa um erro que ocorre em relação à função global eval(). |
2 | RangeError Cria uma instância que representa um erro que ocorre quando uma variável ou parâmetro numérico está fora de seu intervalo válido. |
3 | ReferenceError Cria uma instância que representa um erro que ocorre ao cancelar a referência de uma referência inválida. |
4 | SyntaxError Cria uma instância que representa um erro de sintaxe que ocorre durante a análise do código. |
5 | TypeError Cria uma instância que representa um erro que ocorre quando uma variável ou parâmetro não é de um tipo válido. |
6 | URIError Cria uma instância que representa um erro que ocorre quando encodeURI() ou decodeURI() são passados parâmetros inválidos. |
Lançamento de exceções
Um erro (predefinido ou definido pelo usuário) pode ser gerado usando o throw statement. Posteriormente, essas exceções podem ser capturadas e você pode executar uma ação apropriada. A seguir está a sintaxe para o mesmo.
Sintaxe: lançando uma exceção genérica
throw new Error([message])
OR
throw([message])
Sintaxe: lançando uma exceção específica
throw new Error_name([message])
Manipulação de exceção
O tratamento de exceções é realizado com um try...catch statement. Quando o programa encontra uma exceção, ele será encerrado de maneira hostil. Para se proteger contra esse erro imprevisto, podemos envolver nosso código em uma instrução try ... catch.
O bloco try deve ser seguido por exatamente um bloco catch ou um bloco finally (ou um dos dois). Quando ocorre uma exceção no bloco try, a exceção é colocada em e e o bloco catch é executado. O bloco opcional finally executa incondicionalmente após try / catch
A seguir está a sintaxe para o mesmo.
try {
// Code to run
[break;]
} catch ( e ) {
// Code to run if an exception occurs
[break;]
}[ finally {
// Code that is always executed regardless of
// an exception occurring
}]
Exemplo
var a = 100;
var b = 0;
try {
if (b == 0 ) {
throw(“Divide by zero error.”);
} else {
var c = a / b;
}
}
catch( e ) {
console.log("Error: " + e );
}
Resultado
A seguinte saída é exibida na execução bem-sucedida do código acima.
Error: Divide by zero error
Note - Observação: você pode gerar uma exceção em uma função e, em seguida, capturar essa exceção na mesma função ou na função do chamador usando um try...catch quadra.
Método onerror ()
o onerroro manipulador de eventos foi o primeiro recurso a facilitar o tratamento de erros em JavaScript. O evento de erro é disparado no objeto da janela sempre que ocorre uma exceção na página.
Exemplo
<html>
<head>
<script type = "text/javascript">
window.onerror = function () {
document.write ("An error occurred.");
}
</script>
</head>
<body>
<p>Click the following to see the result:</p>
<form>
<input type = "button" value = "Click Me" onclick = "myFunc();" />
</form>
</body>
</html>
Resultado
A seguinte saída é exibida na execução bem-sucedida do código acima.
O manipulador de eventos onerror fornece três informações para identificar a natureza exata do erro -
Error message - A mesma mensagem que o navegador exibiria para o erro fornecido.
URL - O arquivo em que ocorreu o erro.
Line number - O número da linha no URL fornecido que causou o erro.
O exemplo a seguir mostra como extrair essas informações.
Exemplo
<html>
<head>
<script type = "text/javascript">
window.onerror = function (msg, url, line) {
document.write ("Message : " + msg );
document.write ("url : " + url );
document.write ("Line number : " + line );
}
</script>
</head>
<body>
<p>Click the following to see the result:</p>
<form>
<input type = "button" value = "Click Me" onclick = "myFunc();" />
</form>
</body>
</html>
Erros personalizados
JavaScript suporta o conceito de erros personalizados. O exemplo a seguir explica o mesmo.
Exemplo 1: erro personalizado com mensagem padrão
function MyError(message) {
this.name = 'CustomError';
this.message = message || 'Error raised with default message';
}
try {
throw new MyError();
} catch (e) {
console.log(e.name);
console.log(e.message); // 'Default Message'
}
A seguinte saída é exibida na execução bem-sucedida do código acima.
CustomError
Error raised with default message
Exemplo 2: Erro personalizado com mensagem de erro definida pelo usuário
function MyError(message) {
this.name = 'CustomError';
this.message = message || 'Default Error Message';
} try {
throw new MyError('Printing Custom Error message');
}
catch (e) {
console.log(e.name);
console.log(e.message);
}
A seguinte saída é exibida na execução bem-sucedida do código acima.
CustomError
Printing Custom Error message