Maison  >  Article  >  interface Web  >  Exemple d'analyse de try catch enfin dans la gestion des exceptions JavaScript

Exemple d'analyse de try catch enfin dans la gestion des exceptions JavaScript

黄舟
黄舟original
2017-10-26 09:41:091667parcourir

Structure syntaxique

try catch enfin est la norme ECMAScript-262 de troisième édition qui fournit un mécanisme de gestion des exceptions est la suivante :


1 try{
2 //可能会发生的错误代码
3 }
4 catch(error){
5 //错误处理
6 }finally{
7  //无论是否有异常都会执行
8 }

La syntaxe est la même que celle de la plupart des langages tels que java.net Si le bloc de code try{} détecte une exception, le bloc catch obtiendra un objet de message d'erreur (une instance d'Erreur).

Nous devrions mettre le code qui peut provoquer des erreurs dans le bloc try, et la gestion des erreurs est dans le bloc catch en js, si une erreur se produit dans le bloc de code 3f1c4e4b6b16bbbd69b2ee476dc4f83a2cacc6d41bbb37262a98f745aa00fbf0 et il n'y a pas de Si vous effectuez la gestion des exceptions de capture, le code suivant du bloc de code 3f1c4e4b6b16bbbd69b2ee476dc4f83a actuel ne sera pas exécuté, mais il n'affectera pas les autres codes de bloc de code 3f1c4e4b6b16bbbd69b2ee476dc4f83a2cacc6d41bbb37262a98f745aa00fbf0 🎜>


 1 <script> 
 2   function run(){ 
 3       console.log(age); 
 4   } 
 5     run(); 
 6     console.log(&#39;可以输出吗?&#39;);//没有执行 
 7 </script> 
 8  
 9 <script>
 10     console.log(&#39;这是第二个代码块&#39;);//执行了,这是第二个代码块
 11 </script>
Au contraire, le code suivant sera quand même exécuté, comme par exemple :


 1 <script> 
 2   function run(){ 
 3       try{ 
 4           console.log(age); 
 5       }catch(error){ 
 6  
 7       } 
 8  
 9   }
 10     run();
 11     console.log(&#39;可以输出吗?&#39;);//可以输出吗?
 12 </script>
 13 
 14 <script>
 15     console.log(&#39;这是第二个代码块&#39;);//这是第二个代码块
 16 </script>
finalement déclaration

S'il y a un bloc de code final, alors le code à l'intérieur sera exécuté quelle que soit la raison, même s'il y a une instruction return dans l'instruction catch, le code suivant :


    function say() {        try {
            console.log(age)            return;
        } catch (erroe) {
            console.log(erroe.message);//age is not defined
            return;
        } finally {
           console.log(&#39;finally 执行了&#39;);//finally 执行了        }
    }
    say();
Comprendre le type d'erreur

lorsque Si une erreur se produit pendant l'exécution du code, un objet Error sera créé et généré. Cet objet contient des informations de description de l'erreur.

Par exemple, dans l'instruction

try...catch(error){...}, Error est un objet lancé par le type Error. L'objet a trois attributs de base : nom. , nom de l'erreur, message Informations sur l'erreur, informations sur la pile d'erreur ;

Plusieurs types d'erreurs peuvent survenir pendant la période d'exécution, donc Error a envoyé plusieurs fils tels que :

Erreur erreurs de type d'erreur Voir, s'il y en a, elles sont générées par le navigateur ; l'objectif principal de ce type de base est que les développeurs génèrent des erreurs personnalisées.

Evalerror crée une instance ERROR pour indiquer la raison de l'erreur : elle est liée à Eval().
Erreur interne                                                                                                                                                                                      pour créer une instance d'une exception levée qui représente une erreur interne dans le moteur Javascript. Par exemple : "Trop de récursivité".                                                                        pour créer une instance d'erreur afin d'indiquer la cause de l'erreur : la variable numérique ou le paramètre dépasse sa plage valide.
ReferenceError                          Créer une instance d'erreur, indiquant la cause de l'erreur : référence non valide.
Syntaxerror crée une instance d'Erreur pour indiquer la raison pour laquelle l'erreur est : evac () l'erreur de syntaxe s'est produite lors du processus d'analyse du code.
Typerror crée une instance ERROR, indiquant la cause de l'erreur : les variables ou les paramètres ne sont pas des types effectifs.
URIError                             Créez une instance d'erreur pour indiquer la cause de l'erreur : les paramètres passés à encodeURI() ou decodeURl() ne sont pas valides.

Error est la classe de base. D'autres types d'erreur sont hérités du type Error, donc la sous-classe a également trois attributs de base : nom, message d'erreur et pile.

Avec ces types d'erreurs, nous pouvons écrire du code comme celui-ci pour gérer spécifiquement un certain type d'exception en jugeant le type d'exception, tel que :


 1 <script> 
 2     function run() { 
 3         try { 
 4             say("hello word"); 
 5         } 
 6         catch (error) { 
 7             for (var p in error) { 
 8                 document.writeln(error[p]); 
 9             }
 10             //上面可以遍历错误
 11             if (error instanceof EvalError) {
 12                 //如果非法调用了eval()函数,则会抛出EvalError的异常。
 13                 alert("EvalError");
 14             } else if (error instanceof ReferenceError) {
 15                 //错误的引用,此例子是执行到了本步。
 16                 alert("ReferenceError");
 17             } else if (error instanceof RangeError) {
 18                 //数值超出了范围
 19                 alert("RangeError");
 20             } else if (error instanceof SyntaxError) {
 21                 //语法错误,错误发生在eval(),
 22                 alert("SyntaxError");
 23             } else if (error instanceof TypeError) {
 24                 //变量类型不是预期的
 25                 alert("TypeError");
 26             } else if (error instanceof URIError) {
 27                 //错误发生在encodeURI()或decodeURI()中
 28                 alert("URIError");
 29             }
 30         }
 31     }
 32     run();
 33 </script>

throw renvoie un type d'erreur personnalisé

Syntaxe : throw exception

exception peut être n'importe quel type de données tel que :

lancer 12345;

lancer 'bonjour';

lancer vrai;

lancer {nom:'Joel',age:20};

Utilisez l'instruction throw pour lancer une exception personnalisée telle que :


Mécanisme de gestion des exceptions Javascript
 1 <script> 
 2     function see(){ 
 3         try { 
 4             if(true){ 
 5                 throw new Error("my eroor!"); 
 6             } 
 7  
 8         } catch (error) { 
 9             console.log(error.name );//Error
 10             console.log(error.message);//my eroor!
 11             console.log(error.stack);//Error: my eroor! at see (try.html:12) at try.html:22
 12         }
 13     }
 14     see();
 15 </script>

Lors de l'exécution de javascript Lorsqu'un Une erreur se produit dans le code, le moteur js recherchera le catch correspondant étape par étape en fonction de la pile d'appels js. Si le gestionnaire de catch correspondant n'est pas trouvé ou s'il y a une erreur ou si une nouvelle erreur est générée, l'erreur sera finalement générée. Le traitement est confié au navigateur, qui affichera le message d'erreur à l'utilisateur de différentes manières (IE affiche un motif triangulaire jaune dans le coin inférieur gauche, tandis que Firefix l'affichera dans la console d'erreur

window.onerror

Toute erreur qui n'est pas gérée par tyr-catch déclenchera l'événement d'erreur de l'objet window, tel que :


L'événement window.onerror reçoit trois paramètres : msg message d'erreur, url l'url de la page où l'erreur s'est produite, ligne la ligne de code où l'erreur s'est produite.

 1 <script> 
 2     window.onerror= function (msg,url,l) 
 3     { 
 4         console.log(msg)//Uncaught ReferenceError: a is not defined 
 5         console.log(url)//http://localhost:63342/person_Project/js_demo/onerror.html 
 6         console.log(l)//17 
 7     } 
 8  
 9     function run(){
 10         console.log(a)
 11     }
 12     run()
 13 </script>
Solution de surveillance des exceptions de code frontal

Avec l'objet d'erreur capturé par try catch et window.onerror surveillant globalement les événements d'erreur, la surveillance des erreurs de code js frontal devient trop simple.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn