throw

Resumen

Lanza una excepcion definida por el usuario.

Sintaxis

throw expresion;
expresion
Expresi贸n a lanzar.

Descripci贸n

Utilice la sentencia throw para lanzar una excepci贸n. Cuando lanza una excepci贸n, expresion especifica el valor de la excepci贸n. Cada uno de los siguientes ejemplos lanza una excepci贸n:

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

Ejemplos

Ejemplo: Lanzar un objeto

Puede especificar un objeto cuando lanza una excepci贸n. Puede entonces referenciar las propiedades del objeto en el bloque catch. El siguiente ejemplo crea un objeto miExcepcionUsuario del tipo ExceptionUsuario y la utiliza us谩ndola en una sentencia throw.

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
}

Ejemplo: Otro ejemplo sobre lanzar un objeto

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 ExcepcionFormatoCodigoPostal.

/*
 * 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

Ejemplo: Relanzar una excepci贸n

Puede usar throw 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.

try {
   throw n; // lanza una excepci贸n con un valor num茅rico
} catch (excepcion) {
   if (excepcion <= 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;
   }
}

Vea Tambi茅n