[ Web Proxy ]
URL:
Viewing: https://developer.mozilla.org/fr/docs/Web/JavaScript/Reference/Statements/throw [Back]  [Original]

throw - JavaScript | MDN

Cette page a t traduite partir de l'anglais par la communaut. Vous pouvez contribuer en rejoignant la communaut francophone sur MDN Web Docs.

View in English Always switch to English

throw

Baseline Large disponibilit

Cette fonctionnalit est bien tablie et fonctionne sur de nombreux appareils et versions de navigateurs. Elle est disponible sur tous les navigateurs depuis juillet 2015.

L'instruction throw permet de lever une exception dfinie par l'utilisateur. L'excution de la fonction courante sera stoppe (les instructions situes aprs l'instruction throw ne seront pas excutes) et le contrle sera pass au premier bloc catch de la pile d'appels. Si aucun bloc catch ne se trouve dans les fonctions de la pile d'appels, le programme sera termin.

Dans cet article

Exemple interactif

function getRectArea(width, height) {
  if (isNaN(width) || isNaN(height)) {
    throw new Error("Parameter is not a number!");
  }
}

try {
  getRectArea(3, "A");
} catch (e) {
  console.error(e);
  // Expected output: Error: Parameter is not a number!
}

Syntaxe

js
throw expression;
expression

L'expression qui fournit l'exception lever.

Description

L'instruction throw permet de lever (throw en anglais) une exception. Lorsqu'on lve une exception, expression fournit la valeur de l'exception. Chacune des instructions ci-aprs permet de lever une exception :

js
throw "monErreur"; // gnre une exception tant une chane de caractres
throw 42; // gnre une exception ayant la valeur 42
throw true; // gnre une exception ayant la valeur true
throw new Error("Obligatoire"); // gnre un objet Error avec le message "Obligatoire"

On notera galement que l'instruction throw est affecte par l'insertion automatique de point-virgule car il n'est pas permis d'avoir un caractre de fin de ligne entre le mot-cl throw et l'expression.

Exemples

Lever une exception qui est un objet

Il est possible de lever une exception qui est un objet et de faire rfrence aux proprits de cet objet au sein du bloc catch. Dans l'exemple suivant, on cre un objet monException du type ExceptionUtilisateur puis on utilise cet objet avec une instruction throw.

js
function ExceptionUtilisateur(message) {
  this.message = message;
  this.name = "ExceptionUtilisateur";
}
function getNomMois(mo) {
  mo = mo - 1; // Adjust month number for array index (1=Jan, 12=Dec)
  var mois = [
    "Jan",
    "Fv",
    "Mar",
    "Avr",
    "Mai",
    "Juin",
    "Juil",
    "Aot",
    "Sept",
    "Oct",
    "Nov",
    "Dc",
  ];
  if (mois[mo] !== undefined) {
    return mois[mo];
  } else {
    throw new ExceptionUtilisateur("Numro de mois invalide");
  }
}

try {
  // les instructions  tenter
  var monMois = 15; // 15 est en dehors des limites prvues
  var nomMois = getNomMois(monMois);
} catch (e) {
  nomMois = "unknown";
  console.error(e.message, e.name); // on passe les caractristiques de l'exception
  //  un gestionnaire d'erreur
}

Deuxime exemple avec un objet

Ici, on cherche valider une chane de caractres reprsentant un code postal amricain. Si le format utilis est invalide, cela provoquera une exception avec un objet du type ZipFormatIncorrectException. (Le mot-cl const introduit avec ECMAScript 6 est utilis dans cet exemple).

js
/*
 * Cre un objet ZipCode.
 *
 * Les formats accepts sont :
 *    12345
 *    12345-6789
 *    123456789
 *    12345 6789
 *
 * Si l'argument pass au constructeur ZipCode n'est pas conforme
 *  un de ces formats, une exception sera leve.
 */

function ZipCode(zip) {
  zip = new String(zip);
  pattern = /[0-9]{5}([- ]?[0-9]{4})?/;
  if (pattern.test(zip)) {
    // la valeur du code sera la premire correspondance
    // dans la chane
    this.value = zip.match(pattern)[0];
    this.valueOf = function () {
      return this.value;
    };
    this.toString = function () {
      return String(this.value);
    };
  } else {
    throw new ZipFormatIncorrectException(zip);
  }
}

function ZipFormatIncorrectException(value) {
  this.value = value;
  this.message = "le format n'est pas conforme";
  this.toString = function () {
    return this.value + this.message;
  };
}

/*
 * Cette fonction pourrait tre utilise dans un script
 * pour valider des adresses
 */

const ZIPCODE_INVALID = -1;
const ZIPCODE_UNKNOWN_ERROR = -2;

function vrifierZipCode(z) {
  try {
    z = new ZipCode(z);
  } catch (e) {
    if (e instanceof ZipFormatIncorrectException) {
      return ZIPCODE_INVALID;
    } else {
      return ZIPCODE_UNKNOWN_ERROR;
    }
  }
  return z;
}

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

Propager une exception

L'instruction throw peut tre utilise pour transmettre une exception qui aurait t intercepte avec catch. Dans l'exemple suivant, on intercepte une exception avec une valeur numrique et on propage l'exception si la valeur est suprieure 50. L'exception qui est leve se propage dans la fonction appelante ou au niveau le plus haut, visible par l'utilisateur.

js
try {
  throw n; // lve une exception avec une valeur numrique
} catch (e) {
  if (e <= 50) {
    // des instructions pour grer les cas entre 1 et 50
  } else {
    // ce cas ne peut pas tre gr maintenant, on transmet l'exception
    throw e;
  }
}

Spcifications

Spcification
ECMAScript 2027 LanguageSpecification
# sec-throw-statement

Compatibilit des navigateurs

Voir aussi


Web Proxy Viewer  |  New URL  |  Original Page