Lançamento de exceções em JavaScript
Nas lições anteriores, aprendemos dois locais onde o JavaScript lança uma exceção em caso de problemas.
No seu projeto, no entanto, podem haver outras situações que para você são excepcionais, mas para o JavaScript não são. Nesse caso, você pode criar e lançar suas próprias exceções personalizadas.
Vamos analisar a sintaxe necessária para
isso. Primeiro, a exceção precisa ser criada
usando o comando new Error, passando
o texto da exceção como parâmetro:
new Error('texto da exceção');
Em seguida, esta exceção deve ser lançada usando
o comando throw:
throw new Error('texto da exceção');
Lançar uma exceção faz com que o JavaScript
considere que uma situação excepcional ocorreu.
Isso significa que tal exceção pode ser capturada
usando a construção try-catch e
tratada da maneira desejada.
Vamos ver em um exemplo como usar isso. Suponha que temos uma função que divide um número por outro:
function div(a, b) {
return a / b;
}
Vamos considerar que a divisão por zero
é proibida e, ao tentar fazê-lo, deve
ocorrer uma situação excepcional. Para isso,
verificaremos na função se há uma tentativa
de divisão por 0. Se não houver - dividiremos,
e se houver - lançaremos uma exceção:
function div(a, b) {
if (b !== 0) {
return a / b;
} else {
throw new Error('erro de divisão por zero');
}
}
Vamos primeiro tentar dividir
por 0, sem capturar a exceção:
alert( div(3, 0) );
Nesse caso, a execução do script será interrompida
e aparecerá um erro no console com o texto 'erro
de divisão por zero' (verifique). Vamos
agora capturar nosso erro e
tratá-lo de alguma forma:
try {
alert( div(3, 0) );
} catch (error) {
alert('você está tentando dividir por 0, o que é proibido');
}
Em JavaScript, a tentativa de calcular a raiz quadrada de um número negativo não resulta no lançamento de uma exceção:
let result = Math.sqrt(-1);
console.log(result); // exibirá NaN
Escreva sua própria função que calculará a raiz quadrada de um número e, ao mesmo tempo, lançará uma exceção se a raiz for calculada a partir de um número negativo.