Des erreurs de syntaxe peuvent-elles être détectées dans JavaScript?

MDN déclare :

Un SyntaxError est lancé lorsque le moteur JavaScript rencontre des jetons ou un jeton qui ne correspond pas à la syntaxe de la langue lors de l'analyse du code.

Mais s'il y a une erreur de syntaxe, comment le programme pourrait-il même fonctionner en premier lieu?

Comment les erreurs de syntaxe JavaScript peuvent-elles même être capturées?

Ce sont des erreurs d'exécution qui peuvent être détectées avec try-catch, pas des erreurs de syntaxe ( si vous eval votre code, vous pouvez gérer des erreurs de syntaxe dans le code identifié, mais ce n'est que bizarre).

Je vous recommanderais de lire ceci:

Vous pouvez prendre des exceptions générées par le programmeur et d'exécution, mais vous ne pouvez pas détecter les erreurs de syntaxe JavaScript, même si vous pouvez les gérer dans certains navigateurs à l'aide de window.onerror .

Ceci est tiré du livre JavaScript- The Complete Reference by Thomas-Powell que j'aime beaucoup. Vous pouvez vous référer aux exemples de code dans ce livre.

Vous ne pouvez pas utiliser try-catch blocs try-catch pour gérer les erreurs de syntaxe lorsqu'ils sont lancés pendant que le code est analysé et non pendant son exécution.

Cependant, vous pouvez utiliser window.onerror et comprendre qu'il y a une erreur. Vous devez vous assurer que la fonction onerror est définie dans une étiquette de script séparée et non dans la balise dans laquelle l'erreur peut être présente!

Par exemple:

Cela ne fonctionnera pas, car le script doit encore démarrer lorsque l'erreur est lancée:

 <script> window.onerror = function (e) { console.log('Error: ', e); }; console.log('a''); </script> 

Cela fonctionnera:

 <script> window.onerror = function (e) { console.log('Error: ', e); }; </script> <script> console.log('a''); </script> 

Démo jsfiddle

Si vous essayez simplement de vous assurer que vous avez écrit un JavaScript syntaxiquement valide, je ne peux pas vous recommander JSLint ou JSHint .

  1. Apprenez-en . Utilise le.
  2. Devenez un meilleur programmeur JavaScript.
  3. ???
  4. Profit!

Dans le monde JS, SyntaxError CAN est une exception d'exécution. Cela peut se produire, par exemple, lors de l'analyse d'une réponse JSON qui n'est pas du format JSON. Le serveur peut envoyer de nombreux types de réponses, donc, si vous envoyez une réponse du corps HTML à votre demande qui attend JSON dans le corps, vous allez obtenir un SyntaxError lancé dans le JS. Dans un tel cas, vous recevrez un message d'erreur qui ressemble à ceci: SyntaxError: JSON Parse error: Unrecognized token '<' .

Mais il existe d'autres SyntaxErrors d'exécution que vous pourriez obtenir aussi. Mozilla a une liste de certains ici: SyntaxErrors pour l'analyse JSON

Vous voudrez peut-être les attraper dans votre code. Vous pouvez le faire avec un bloc try / catch générique comme ceci:

 try { JSON.parse('<html></html>'); } catch (e) { console.log("I catch & handle all errors the same way."); } 

OU vous pouvez rechercher le SyntaxError spécifiquement:

 try { JSON.parse('<html></html>'); } catch (e) { if (e instanceof SyntaxError) { console.log("I caught a pesky SyntaxError! I'll handle it specifically here."); } else { console.log("I caught an error, but it wasn't a SyntaxError. I handle all non-SyntaxErrors here."); } } 

Mozilla a encore plus d' informations sur les erreurs JS et les manipulant .