Resumo : neste tutorial, você aprenderá como usar a throw
instrução JavaScript para lançar uma exceção.
Introdução à instrução JavaScript throw
A throw
instrução permite que você lance uma exceção. Aqui está a sintaxe da throw
instrução:
throw expression;
Linguagem de código: JavaScript ( javascript )
Nesta sintaxe, expression
especifica o valor da exceção. Normalmente, você usará uma nova instância da Error
classe ou de suas subclasses.
Ao encontrar a throw
instrução, o mecanismo JavaScript para de executar e passa o controle para o primeiro catch
bloco da pilha de chamadas . Se não catch
existir nenhum bloco, o mecanismo JavaScript encerra o script.
Exemplos de exceção de lançamento de JavaScript
Vejamos alguns exemplos de uso da throw
declaração.
1) Usando a instrução JavaScript throw para lançar uma exceção
O exemplo a seguir usa a throw
instrução para lançar uma exceção em uma função :
function add(x, y) {
if (typeof x !== 'number') {
throw 'The first argument must be a number';
}
if (typeof y !== 'number') {
throw 'The second argument must be a number';
}
return x + y;
}
const result = add('a', 10);
console.log(result);
Linguagem de código: JavaScript ( javascript )
Como funciona.
Primeiro, defina a add()
função que aceita dois argumentos e retorna a soma deles. A add()
função usa o typeof
operador para verificar o tipo de cada argumento e lança uma exceção se o tipo não for um número.
Segundo, chame a add()
função e passe uma string e um número para ela.
Terceiro, mostre o resultado no console.
O script causa um erro porque o primeiro argumento ( "a"
) não é um número:
Uncaught The first argument must be a number
Para lidar com a exceção, você pode usar a try...catch
instrução. Por exemplo:
function add(x, y) {
if (typeof x !== 'number') {
throw 'The first argument must be a number';
}
if (typeof y !== 'number') {
throw 'The second argument must be a number';
}
return x + y;
}
try {
const result = add('a', 10);
console.log(result);
} catch (e) {
console.log(e);
}
Linguagem de código: JavaScript ( javascript )
Saída:
The first argument must be a number
Neste exemplo, colocamos a chamada à add()
função em um try
bloco. Como a expression
instrução throw
é uma string, a exceção no catch
bloco é uma string, conforme mostrado na saída.
2) Usando a instrução JavaScript throw para lançar uma instância da classe Error
No exemplo a seguir, lançamos uma instância da Error
classe em vez de uma string na add()
função;
function add(x, y) {
if (typeof x !== 'number') {
throw new Error('The first argument must be a number');
}
if (typeof y !== 'number') {
throw new Error('The second argument must be a number');
}
return x + y;
}
try {
const result = add('a', 10);
console.log(result);
} catch (e) {
console.log(e.name, ':', e.message);
}
Linguagem de código: JavaScript ( javascript )
Saída:
Error : The first argument must be a number
Linguagem de código: JavaScript ( javascript )
Conforme mostrado na saída, o objeto de exceção no catch
bloco possui o name
as Error
e o message
as aquele que passamos para o Error()
construtor.
3) Usando a instrução JavaScript throw para lançar uma exceção definida pelo usuário
Às vezes, você deseja gerar um erro personalizado em vez do erro interno do Error
. Para fazer isso, você pode definir uma classe de erro personalizada que estenda a Error
classe e lançar uma nova instância dessa classe. Por exemplo:
Primeiro, defina o NumberError
que estende a Error
classe:
class NumberError extends Error {
constructor(value) {
super(`"${value}" is not a valid number`);
this.name = 'InvalidNumber';
}
}
Linguagem de código: JavaScript ( javascript )
O constructor()
da NumberError
classe aceita um valor que você passará para ela ao criar uma nova instância da classe.
No constructor()
da NumberError
classe, chamamos o construtor da Error
classe através do super
e passamos uma string para ele. Além disso, substituímos o nome do erro pela string literal NumberError
. Se não fizermos isso, o name
do NumberError
será Error
.
Segundo, use a NumberError
classe na add()
função:
function add(x, y) {
if (typeof x !== 'number') {
throw new NumberError(x);
}
if (typeof y !== 'number') {
throw new NumberError(y);
}
return x + y;
}
Linguagem de código: JavaScript ( javascript )
Na add()
função, lançamos uma instância da NumberError
classe se o argumento não for um número válido.
Terceiro, capture a exceção lançada pela add()
função:
try {
const result = add('a', 10);
console.log(result);
} catch (e) {
console.log(e.name, ':', e.message);
}
Linguagem de código: JavaScript ( javascript )
Saída:
InvalidNumber : "a" is not a valid number
Linguagem de código: JavaScript ( javascript )
Neste exemplo, o nome da exceção é NumberError
e a mensagem é aquela que passamos para o super()
da constructor()
classe NumberError
.
Resumo
- Use a instrução JavaScript
throw
para lançar uma exceção definida pelo usuário.