A partir de Internet Explorer 5 et Netscape 6, les implémentations de Javascript comportent une instruction try ... catch ... finally
pour la gestion des exceptions, c'est-à-dire les erreurs en cours d'exécution. Cette instruction traite les exceptions provoquées par une erreur ou par une instruction de levée d'exception.
La syntaxe est la suivante :
try { // instructions pouvant déclencher une exception } catch(erreur) { // instructions à exécuter en cas d'exception } finally { // instructions à exécuter dans tous les cas }
D'abord, les instructions du bloc try
s'exécutent.
try
une exception est déclenchée, l'exécution passe au bloc catch
et le code de l'exception est passé dans le paramètre. A la fin du bloc catch
, l'exécution continue dans le bloc finally
catch
est ignoré et l'exécution passe au bloc finally
Le bloc finally
sert souvent à libérer la mémoire, pour éviter qu'elle ne reste bloquée lors d'une erreur fatale, même si ce souci ne se pose guère dans Javascript.
Exemple :
try { tablo = new Array(); // création d'un tableau fonctionRisquee(tablo); // appel d'une fonction qui peut ne pas fonctionner } catch (...) { logError(); // traitement des erreurs éventuelles } finally { delete tablo; // libération de la mémoire occupée par tablo même en cas d'erreur fatale }
Le bloc finally
est facultatif :
try { // instructions } catch (erreur) { // instructions }
Le bloc catch
est lui aussi facultatif. Dans ce cas, si une exception se déclenche, l'exécution quitte le bloc try
et passe au bloc finally
sans que l'erreur soit traitée.
try { // instructions } finally { // instructions }
Attention : il est obligatoire d'avoir au moins l'un des deux blocs catch
ou finally
, ils ne peuvent pas être absents tous les deux.
try { instruction; } // erreur
Si vous utilisez le bloc catch
, le paramètre est obligatoire, même si vous ne l'utilisez pas dans le bloc.
try { instruction; } catch() { instruction; } // erreur
Sous Mozilla il est permis d'avoir plusieurs instructions catch
. Il s'agit d'une extension au standard ECMAScript. Dans ce cas, la syntaxe est similaire à celle de Java :
try { instruction; } catch ( e if e == "InvalidNameException" ) { instruction; } catch ( e if e == "InvalidIdException" ) { instruction; } catch ( e if e == "InvalidEmailException" ) { instruction; } catch ( e ) { instruction; }