Visit Mozilla.org

Référence de JavaScript 1.5 Core:Instructions:throw

Un article de MDC.


Sommaire

[modifier] Résumé

Déclenche une exception personnalisée.

Instruction
Implémentation : JavaScript 1.4
Version ECMA : ECMA-262, Édition 3

[modifier] Syntaxe

throw expression;

[modifier] Paramètres

expression 
L'expression à déclencher.

[modifier] Description

Utilisez l'instruction throw pour déclencher une exception. Le paramètre expression indique la valeur de cette exception. Chacune des instructions suivantes déclenche une exception :

  • throw "Erreur2"; // génère une exception avec une valeur chaîne
  • throw 42; // génère une exception avec la valeur 42
  • throw true; // génère une exception avec la valeur true

[modifier] Exemples

[modifier] Exemple : exception avec un objet

Un objet peut être spécifié lors du déclenchement d'une exception. Ses propriétés peuvent ensuite être référencées depuis le bloc catch. L'exemple qui suit crée un objet monExceptionUtilisateur du type UserException et l'utilise dans une instruction throw.

function ExceptionUtilisateur(message) {
   this.message = message;
   this.nom = "ExceptionUtilisateur";
}
function numDuMois(num_mois) {
   num_mois = num_mois-1; // Ajuste le numéro du mois en indice de tableau (1=Jan, 12=Déc)
   var mois = new Array("Jan", "Fév", "Mar", "Avr", "Mai", "Jun", "Jul",
      "Aou", "Sep", "Oct", "Nov", "Déc");
   if (mois[num_mois] != null) {
      return mois[num_mois];
   } else {
      monExceptionUtilisateur = new ExceptionUtilisateur("NomMoisInvalide");
      throw monExceptionUtilisateur;
   }
}

try {
   // instructions à essayer
   nom_mois = nomDuMois(num_mois);
} catch (e) {
   nom_mois = "inconnu";
   logDesErreurs(e.message, e.nom); // passe l'objet exception au gestionnaire d'erreur
}

[modifier] Exemple : une autre exception avec un objet

L'exemple qui suit vérifie si une chaîne en entrée est un code postal US (zip). Si le code utilise un format invalide, l'instruction throw déclenche une exception en créant un objet de type ExceptionFormatCodeZip.

/*
 * Crée un objet CodeZip.
 *
 * Les formats acceptés pour un code zip sont :
 *    12345
 *    12345-6789
 *    123456789
 *    12345 6789
 *
 * Si le paramètre passé au constructeur CodeZip ne correspond pas à un de 
 * ces formats, déclenche une exception.
 */

function CodeZip(zip) {
   zip = new String(zip);
   pattern = /[0-9]{5}([- ]?[0-9]{4})?/;
   if (pattern.test(zip)) {
      // la valeur du code zip sera le premier résultat dans la chaîne
      this.valeur = zip.match(pattern)[0];
      this.valueOf = function() {
         return this.valeur
      };
      this.toString = function() {
         return String(this.valeur)
      };
   } else {
      throw new ExceptionFormatCodeZip(zip);
   }
}

function ExceptionFormatCodeZip(valeur) {
   this.valeur = valeur;
   this.message = " ne correspond pas au format attendu pour un code zip";
   this.toString = function() {
      return this.value + this.message
   };
}

/*
 * Ceci pourrait être un script de validation d'adresses aux États-Unis.
 */

var CODEZIP_INVALIDE = -1;
var CODEZIP_ERREUR_INCONNUE = -2;

function verifieCodeZip(z) {
   try {
      z = new CodeZip(z);
   } catch (e) {
      if (e instanceof ExceptionFormatCodeZip) {
         return CODEZIP_INVALIDE;
      } else {
         return CODEZIP_ERREUR_INCONNUE;
      }
   }
   return z;
}

a = verifieCodeZip(95060);         // renvoie 95060
b = verifieCodeZip(9560;)          // renvoie -1
c = verifieCodeZip("a");           // renvoie -1
d = verifieCodeZip("95060");       // renvoie 95060
e = verifieCodeZip("95060 1234");  // renvoie 95060 1234

[modifier] Exemple : propager une exception

Vous pouvez utiliser throw pour propager une exception après son traitement. L'exemple qui suit traite une exception avec une valeur numérique et la propage si jamais sa valeur dépasse 50. L'exception se propage alors jusqu'à la fonction parente ou au niveau global afin que l'utilisateur puisse la voir.

try {
   throw n; // déclenche une exception avec une valeur numérique
} catch (e) {
   if (e <= 50) {
      // instructions pour gérer les exceptions 1 à 50
   } else {
      // cette exception ne peut pas être gérée ici, elle doit être propagée
      throw e;
   }
}

[modifier] Voir aussi

try...catch