Exceção de lançamento de JavaScript

Resumo : neste tutorial, você aprenderá como usar a throwinstrução JavaScript para lançar uma exceção.

Introdução à instrução JavaScript throw

A throwinstrução permite que você lance uma exceção. Aqui está a sintaxe da throwinstrução:

throw expression;Linguagem de código:  JavaScript  ( javascript )

Nesta sintaxe, expressionespecifica o valor da exceção. Normalmente, você usará uma nova instância da Errorclasse ou de suas subclasses.

Ao encontrar a throwinstrução, o mecanismo JavaScript para de executar e passa o controle para o primeiro catchbloco da pilha de chamadas . Se não catchexistir nenhum bloco, o mecanismo JavaScript encerra o script.

Exemplos de exceção de lançamento de JavaScript

Vejamos alguns exemplos de uso da throwdeclaração.

1) Usando a instrução JavaScript throw para lançar uma exceção

O exemplo a seguir usa a throwinstruçã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 typeofoperador 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...catchinstruçã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 trybloco. Como a expressioninstrução throwé uma string, a exceção no catchbloco é 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 Errorclasse 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 numberLinguagem de código:  JavaScript  ( javascript )

Conforme mostrado na saída, o objeto de exceção no catchbloco possui o nameas Errore o messageas 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 Errorclasse e lançar uma nova instância dessa classe. Por exemplo:

Primeiro, defina o NumberErrorque estende a Errorclasse:

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 NumberErrorclasse aceita um valor que você passará para ela ao criar uma nova instância da classe.

No constructor()da NumberErrorclasse, chamamos o construtor da Errorclasse através do supere passamos uma string para ele. Além disso, substituímos o nome do erro pela string literal NumberError. Se não fizermos isso, o namedo NumberErrorserá Error.

Segundo, use a NumberErrorclasse 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 NumberErrorclasse 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 numberLinguagem de código:  JavaScript  ( javascript )

Neste exemplo, o nome da exceção é NumberErrore a mensagem é aquela que passamos para o super()da constructor()classe NumberError.

Resumo

  • Use a instrução JavaScript throwpara lançar uma exceção definida pelo usuário.

Deixe um comentário

O seu endereço de email não será publicado. Campos obrigatórios marcados com *