Erros JavaScript - Throw e Try to Catch
- Página Anterior Prioridade de Operadores JS
- Próxima Página Escopo JS
try
A instrução permite que você teste erros no bloco de código.
catch
A instrução permite que você lidar com erros.
throw
A sentença permite que você crie erros personalizados.
finally
Permite que você execute código, após o try e catch, independentemente do resultado.
Erros sempre acontecem!
A execução do código JavaScript pode gerar vários tipos de erros.
Os erros podem ser erros de codificação do programador, erros causados por entrada incorreta ou devido a outros problemas imprevisíveis.
Exemplo
Neste exemplo, usamos adddlert
Escrever código de aviso para deliberadamente criar um erro:
<p id="demo"></p> <script> try { adddlert("Bem-vindo à visita!"); } catch(err) { document.getElementById("demo").innerHTML = err.message; } </script>
JavaScript captura adddlert como um erro e executa código para lidar com o erro.
Try e catch no JavaScript
try
A instrução permite definir um bloco de código para detectar erros durante a execução.
catch
A instrução permite definir um bloco de código a ser executado, se ocorrer um erro no bloco de código try.
Sentenças do JavaScript try
e catch
Aparecem em pares:
try { Bloco de código para teste } catch(err) { Bloco de código para tratamento de erros }
JavaScript lança erros
Quando ocorre um erro, o JavaScript geralmente para e gera uma mensagem de erro.
A terminologia é descrita da seguinte forma:O JavaScript lança exceções (lança erros).
O JavaScript realmente cria uma exceção com duas propriedades: Objeto Error:name
e mensagem
.
Sentença throw
throw
A sentença permite que você crie erros personalizados.
Técnicamente, você podeLançar exceção (lançar erro).
As exceções podem ser strings, números, booleanos ou objetos do JavaScript:
throw "Too big"; // Lança texto throw 500; // Lança um número
se você quiser throw
com try
e catch
Juntos, eles podem controlar o fluxo do programa e gerar mensagens de erro personalizadas.
Caso de validação de entrada
Este exemplo verificará a entrada. Se o valor for incorreto, uma exceção será lançada (err).
Este exceção (err) é capturada pela sentença catch e exibe uma mensagem de erro personalizada:
<!DOCTYPE html> <html> <body> <p>Por favor, insira um número entre 5 e 10:</p> <input id="demo" type="text"> <button type="button" onclick="myFunction()">Testar entrada</button> <p id="message"></p> <script> function myFunction() { var message, x; message = document.getElementById("message"); message.innerHTML = ""; x = document.getElementById("demo").value; try { if(x == "") throw "vazio"; if(isNaN(x)) throw "não é um número"; x = Number(x); if(x < 5) throw "pequeno"; if(x > 10) throw "demasiado grande"; } catch(err) { message.innerHTML = "Entrada é " + err; } } </script> </body> </html>
Validação HTML
O código acima é apenas um exemplo.
Os navegadores modernos geralmente combinam JavaScript com validação HTML integrada, usando regras de validação pré-definidas definidas nas propriedades HTML:
<input id="demo" type="number" min="5" max="10" step="1">
Você aprenderá mais sobre validação de formulários em capítulos posteriores deste tutorial.
Sentença finally
finally
A sentença permite que você execute código após o try e catch, independentemente do resultado:
try { // Código de bloco para teste; } catch(err) { // Código de bloco para lidar com erros; } finally { // Código de bloco executado independentemente do resultado; }
Exemplo
function myFunction() { var message, x; message = document.getElementById("message"); message.innerHTML = ""; x = document.getElementById("demo").value; try { if(x == "") throw "está vazio"; if(isNaN(x)) throw "não é um número"; x = Number(x); if(x > 10) throw "muito grande"; if(x < 5) throw "muito pequeno"; } catch(err) { message.innerHTML = "Erro: " + err + "."; } finally { document.getElementById("demo").value = ""; } }
Objeto Error
O JavaScript possui um objeto built-in error que fornece informações de erro quando ocorre um erro.
o objeto error do JavaScript oferece duas propriedades úteis:name
e mensagem
.
Propriedades do objeto Error
Propriedade | Descrição |
---|---|
name | Definir ou retornar o nome do erro |
mensagem | Definir ou retornar a mensagem de erro (uma string) |
Valores de Nome de Erro
A propriedade name do objeto error pode retornar seis valores diferentes:
Nome do erro | Descrição |
---|---|
EvalError | Erro ocorrido dentro da função eval() |
RangeError | Ocorreu erro fora do intervalo numérico |
ReferenceError | Ocorreu referência ilegal |
SyntaxError | Ocorreu erro de sintaxe |
TypeError | Ocorreu erro de tipo |
URIError | Erro ocorrido no encodeURI() |
A seguir, detalharei esses seis valores diferentes.
Erro de eval
EvalError
indicando erro na função eval().
Versões mais recentes do JavaScript não lançam nenhum EvalError
Use SyntaxError
Substitua por.
Erro de faixa
RangeError
será lançado quando você usar um número fora do intervalo de valores válidos.
Por exemplo: você não pode configurar o número de dígitos significativos para 500.
Exemplo
var num = 1; try { num.toPrecision(500); // Um número não pode ter 500 dígitos significativos } catch(err) { document.getElementById("demo").innerHTML = err.name; }
Erro de referência
Se você usar (referenciar) uma variável não declarada, então ReferenceError
será lançado:
Exemplo
var x; try { x = y + 1; // y não pode ser referenciado (usado) } catch(err) { document.getElementById("demo").innerHTML = err.name; }
Erro de sintaxe
Se você calcular código com sintaxe incorreta, ele SyntaxError
lançado:
Exemplo
try { eval("alert('Hello')"); // Faltando 'produzirá erro } catch(err) { document.getElementById("demo").innerHTML = err.name; }
Erro de tipo
Se o valor que você está usando não estiver dentro do intervalo esperado, então TypeError
lançado:
Exemplo
var num = 1; try { num.toUpperCase(); // Você não pode converter números para maiúsculas } catch(err) { document.getElementById("demo").innerHTML = err.name; }
Erro URI
Se você usar caracteres ilegais nas funções URI, então URIError
lançado:
Exemplo
try { decodeURI("%%%"); // Você não pode codificar esses sinais de percentual em URI } catch(err) { document.getElementById("demo").innerHTML = err.name; }
Propriedades do objeto Error não padronizadas
Mozilla e Microsoft definiram propriedades do objeto error não padronizadas:
- fileName (Mozilla)
- lineNumber (Mozilla)
- columnNumber (Mozilla)
- stack (Mozilla)
- description (Microsoft)
- number (Microsoft)
Não use essas propriedades em sites públicos. Elas não funcionarão em todos os navegadores.
- Página Anterior Prioridade de Operadores JS
- Próxima Página Escopo JS