Esta página foi traduzida do inglês pela comunidade.Saiba mais e junte-se à comunidade MDN Web Docs.
throw
Baseline Widely available
This feature is well established and works across many devices and browser versions. It’s been available across browsers since julho de 2015.
Adeclaraçãothrow lança uma exceção definida pelo usuário. A execução da função atual vai parar (as instruções após othrow não serão executadas), e o controle será passado para o primeiro blococatch na pilha de chamadas. Se nenhum blococatch existe entre as funções "chamadoras", o programa vai terminar.
In this article
Sintaxe
throw expressão;
expressãoA expressão a ser lançada.
Descrição
Use a instruçãothrow para lançar uma exceção. Quando você lança uma exceção,expressão especifica o valor da exceção. Cada uma das intruções a seguir lança uma exceção:
throw "Erro2"; // gera uma exceção com um valor stringthrow 42; // gera uma exceção com o valor 42throw true; // gera uma exceção com o valor trueNote também que a instruçãothrow é afetada pelainserção automática de ponto-e-vírgula (ASI) como nenhum terminador de linha entre a palavrathrow e a expressão é permitido.
Exemplos
>Lançando um objeto
Você pode especificar um objeto quando você lança uma exceção. Você pode então referenciar as propriedades do objeto no blococatch. O exemplo a seguir cria um objeto do tipoUserException e o usa na intruçãothrow.
function UserException(message) { this.message = message; this.name = "UserException";}function getMonthName(mo) { mo = mo - 1; // Ajusta o número do mês para index de array (1=Jan, 12=Dec) var months = [ "Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec", ]; if (months[mo] !== undefined) { return months[mo]; } else { throw new UserException("InvalidMonthNo"); }}try { // statements to try var myMonth = 15; // 15 is out of bound to raise the exception monthName = getMonthName(myMonth);} catch (e) { monthName = "unknown"; logMyErrors(e.message, e.name); // pass exception object to err handler}Outro exemplo lançando um objeto
O exemplo a seguir testa uma string de entrada para um cep dos Estados Unidos. Se o CEP utiliza um formato inválido, a intrução throw lança uma exceção através da criação de um objeto do tipoZipCodeFormatException.
/* * Cria um objeto ZipCode. * * Formatos aceitos para o CEP são: * 12345 * 12345-6789 * 123456789 * 12345 6789 * * Se o argumento passado para o construtor do ZipCode não atende * a um desses padrões uma exceção é lançada. */function ZipCode(zip) { zip = new String(zip); pattern = /[0-9]{5}([- ]?[0-9]{4})?/; if (pattern.test(zip)) { // o valor do CEP será a primeira combinação na string this.value = zip.match(pattern)[0]; this.valueOf = function () { return this.value; }; this.toString = function () { return String(this.value); }; } else { throw new ZipCodeFormatException(zip); }}function ZipCodeFormatException(value) { this.value = value; this.message = "does not conform to the expected format for a zip code"; this.toString = function () { return this.value + this.message; };}/* * Isso poderia estar em um script que valida dados de endereços * para os endereços dos Estados Unidos. */const ZIPCODE_INVALID = -1;const ZIPCODE_UNKNOWN_ERROR = -2;function verifyZipCode(z) { try { z = new ZipCode(z); } catch (e) { if (e instanceof ZipCodeFormatException) { return ZIPCODE_INVALID; } else { return ZIPCODE_UNKNOWN_ERROR; } } return z;}a = verifyZipCode(95060); // retorna 95060b = verifyZipCode(9560); // retorna -1c = verifyZipCode("a"); // retorna -1d = verifyZipCode("95060"); // retorna 95060e = verifyZipCode("95060 1234"); // retorna 95060 1234Relançando uma exceção
Você pode usarthrow para relançar uma exceção após você pegá-la. O exemplo a seguir pega uma exceção com um valor numérico e a relança se o valor for maior que 50. A exceção relançada propaga para a função encapsuladora ou para o nível superior para que o usuário a veja.
try { throw n; // lança uma exceção com um valor numérico} catch (e) { if (e <= 50) { // instruções para tratar exceções 1-50 } else { // não pode tratar esta exceção então relança throw e; }}Especificações
| Specification |
|---|
| ECMAScript® 2026 Language Specification> # sec-throw-statement> |