aboutsummaryrefslogtreecommitdiff
path: root/files/es/web/javascript/referencia/sentencias/throw/index.html
blob: d3e52f83ac87f438bd0130c5b51f986c48bdeda1 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
---
title: throw
slug: Web/JavaScript/Referencia/Sentencias/throw
tags:
  - JavaScript
  - Statement
translation_of: Web/JavaScript/Reference/Statements/throw
---
<div>{{jsSidebar("Statements")}}</div>

<h2 id="Resumen" name="Resumen">Resumen</h2>

<p>Lanza una excepcion definida por el usuario.</p>

<h2 id="Sintaxis" name="Sintaxis">Sintaxis</h2>

<pre class="syntaxbox">throw <em>expresion</em>;</pre>

<dl>
 <dt><code>expresion</code></dt>
 <dd>Expresión a lanzar.</dd>
</dl>

<h2 id="Descripci.C3.B3n" name="Descripci.C3.B3n">Descripción</h2>

<p>Utilice la sentencia <code>throw</code> para lanzar una excepción. Cuando lanza una excepción, <code>expresion</code> especifica el valor de la excepción. Cada uno de los siguientes ejemplos lanza una excepción:</p>

<pre class="brush: js">throw "Error2"; // genera una excepción con un valor cadena
throw 42; // genera una excepción con un valor 42
throw true; // genera una excepción con un valor true</pre>

<h2 id="Ejemplos" name="Ejemplos">Ejemplos</h2>

<h3 id="Ejemplo:_Lanzar_un_objeto" name="Ejemplo:_Lanzar_un_objeto">Ejemplo: Lanzar un objeto</h3>

<p>Puede especificar un objeto cuando lanza una excepción. Puede entonces referenciar las propiedades del objeto en el bloque <code>catch</code>. El siguiente ejemplo crea un objeto <code>miExcepcionUsuario</code> del tipo <code>ExceptionUsuario</code> y la utiliza usándola en una sentencia <code>throw</code>.</p>

<pre class="brush: js">function ExceptionUsuario(mensaje) {
   this.mensaje = mensaje;
   this.nombre = "ExceptionUsuario";
}

function getNombreMes(mes) {
   mes = mes - 1; // Ajustar el número de mes al índice del arreglo (1 = Ene, 12 = Dic)
   var meses = new Array("Ene", "Feb", "Mar", "Abr", "May", "Jun", "Jul",
      "Ago", "Sep", "Oct", "Nov", "Dic");
   if (meses[mes] != null) {
      return meses[mes];
   } else {
      miExcepcionUsuario = new ExceptionUsuario("NumeroMesNoValido");
      throw miExcepcionUsuario;
   }
}

try {
   // sentencias para try
   nombreMes = getNombreMes(miMes);
} catch (excepcion) {
   nombreMes = "desconocido";
   registrarMisErrores(excepcion.mensaje, excepcion.nombre); // pasa el objeto exception al manejador de errores
}
</pre>

<h3 id="Ejemplo:_Otro_ejemplo_sobre_lanzar_un_objeto" name="Ejemplo:_Otro_ejemplo_sobre_lanzar_un_objeto">Ejemplo: Otro ejemplo sobre lanzar un objeto</h3>

<p>El siguiente ejemplo comprueba una cadena de entrada para un código postal de EE.UU. Si el código postal utiliza un formato no válido, la sentencia throw lanza una excepción creando un objeto de tipo <code>ExcepcionFormatoCodigoPostal</code>.</p>

<pre class="brush: js">/*
 * Creates a ZipCode object.
 *
 * Accepted formats for a zip code are:
 *    12345
 *    12345-6789
 *    123456789
 *    12345 6789
 *
 * If the argument passed to the ZipCode constructor does not
 * conform to one of these patterns, an exception is thrown.
 */

function ZipCode(zip) {
   zip = new String(zip);
   pattern = /[0-9]{5}([- ]?[0-9]{4})?/;
   if (pattern.test(zip)) {
      // zip code value will be the first match in the string
      this.value = zip.match(pattern)[0];
      this.valueOf = function() {
         return this.value
      };
      this.toString = function() {
         return String(this.value)
      };
   } else {
      throw new ExcepcionFormatoCodigoPostal(zip);
   }
}

function ExcepcionFormatoCodigoPostal(valor) {
   this.valor = valor;
   this.mensaje = "no conforme con el formato esperado de código postal";
   this.toString = function() {
      return this.valor + this.mensaje
   };
}

/*
 * Esto podría estar en un script que valida los datos de una dirección de EE.UU.
 */

var CODIGOPOSTAL_NOVALIDO = -1;
var CODIGOPOSTAL_DESCONOCIDO_ERROR = -2;

function verificarCodigoPostal(codigo) {
   try {
      codigo = new CodigoPostal(codigo);
   } catch (excepcion) {
      if (excepcion instanceof ExcepcionFormatoCodigoPostal) {
         return CODIGOPOSTAL_NOVALIDO;
      } else {
         return CODIGOPOSTAL_DESCONOCIDO_ERROR;
      }
   }
   return codigo;
}

a = verificarCodigoPostal(95060);         // devuelve 95060
b = verificarCodigoPostal(9560;)          // devuelve -1
c = verificarCodigoPostal("a");           // devuelve -1
d = verificarCodigoPostal("95060");       // devuelve 95060
e = verificarCodigoPostal("95060 1234");  // devuelve 95060 1234
</pre>

<h3 id="Ejemplo:_Relanzar_una_excepci.C3.B3n" name="Ejemplo:_Relanzar_una_excepci.C3.B3n">Ejemplo: Relanzar una excepción</h3>

<p>Puede usar <code>throw</code> para volver a lanzar una excepción después de cogerla. El siguiente ejemplo coge una excepción con un valor numérico y la vuelve a lanzar si el valor es superior a 50. La excepción relanzada propaga hacia arriba la función adjunta o a un nivel superior para que el usuario pueda verla.</p>

<pre class="eval">try {
   throw n; // lanza una excepción con un valor numérico
} catch (excepcion) {
   if (excepcion &lt;= 50) {
      // sentencias para manejar la excepción 1-50
   } else {
      // no se puede manejar esta excepción, así que se vuelve a lanzar
      throw excepcion;
   }
}
</pre>

<h2 id="Vea_Tambi.C3.A9n" name="Vea_Tambi.C3.A9n">Vea También</h2>

<ul>
 <li>{{jsxref("Sentencias/try...catch", "try...catch")}}</li>
</ul>