Programmation JavaScript/Exceptions et erreurs
try / catch / finally
[modifier | modifier le wikicode]Pour éviter qu'une erreur interrompe l'exécution du programme, on peut l'attraper et définir des actions à effectuer si elle survient.
Les exceptions les plus courantes sont des ressources introuvables (ex : plus de réseau ou base de données en maintenance) ou des calculs impossibles comme les divisions par zéro.
Exemples
[modifier | modifier le wikicode]Appel réseau :
try{call_network()}catch(error){print_retry_later_message()}finally{log()}
Calcul d'une moyenne :
"use strict";constx=15;letaverage;try{x=x+5;average=x/0;alert("The average is: "+average);}catch(err){alert("Something strange occurs. The error is: "+err);}finally{alert("End of program.");}
Dans cet exemple, la division par zéro montre que l'exécution est toujours interrompue avant l'affichage de la moyenne, pour passer dans le bloc catch
puis le finally
.
Si on corrige la division, on constate qu'on ne passe plus dans le bloc catch
, mais toujours dans le finally
(même si les blocs qui le précèdent contiennent un return
).
throw
[modifier | modifier le wikicode]Il est aussi possible de provoquer soi-même des exceptions pour interrompre une exécution.
Exemples
[modifier | modifier le wikicode]Calcul d'une moyenne :
"use strict";constx=15;letaverage;try{average=x/0;if(average===Infinity||Number.isNaN(average)){throw"Error during division. The result is: "+average;}alert("The average is: "+average);}catch(err){alert("Something strange occurs. The error is: "+err);}finally{alert("End of program.");}
Ici la division par zéro ne provoque pas d'exception, mais renvoie Infinity. On la provoque donc explicitement ensuite.
Calcul d'un âge :
"use strict";constanswer=prompt("How old are you?");constage=Number(answer);if(isNaN(age)){throwanswer+" cannot be converted to a number.";}alert("Next year you will be "+(age+1));