47 votes

eval javascript, vérification des erreurs de syntaxe

Je voulais savoir s'il était possible de trouver par javascript si un appel à eval() a une erreur de syntaxe ou une variable non définie, etc... donc disons que j'utilise eval pour un javascript arbitraire, y a-t-il un moyen de capturer la sortie d'erreur de cet eval ?

79voto

ChaosPandion Points 37025

Vous pouvez tester si une erreur est bien une SyntaxError.

try {
    eval(code); 
} catch (e) {
    if (e instanceof SyntaxError) {
        alert(e.message);
    }
}

15voto

RandomX Points 111

Lorsque l'on utilise try-catch pour attraper un type d'erreur particulier, il faut s'assurer que les autres types d'exceptions ne sont pas supprimés. Sinon, si le code évalué lance un autre type d'exception, celle-ci pourrait disparaître et entraîner un comportement inattendu du code.

Je suggérerais d'écrire un code comme celui-ci :

try {
    eval(code); 
} catch (e) {
    if (e instanceof SyntaxError) {
        alert(e.message);
    } else {
        throw e;
    }
}

Veuillez noter la section "autre".

5 votes

Throw n'est pas une fonction

0 votes

Sur quoi exécutez-vous votre code si throw n'est pas une fonction ? :)

4voto

Justin Ethier Points 57486

Selon la Documentation Mozilla pour eval :

eval renvoie la valeur de la dernière expression évaluée.

Je pense donc que vous n'avez pas de chance. Ce même document recommande également de ne pas utiliser eval :

eval() est une fonction dangereuse, qui exécute le code qui lui est transmis avec les privilèges de l'appelant. Si vous exécutez eval() avec une chaîne de caractères qui pourrait être affectée par une partie malveillante,

S

3voto

Pablo Grisafi Points 2674

Vous pouvez utiliser JsLint qui contient un parseur javascript écrit en javascript. Il vous donnera beaucoup d'informations sur votre code, il peut être configuré pour être plus détendu ou non, etc...

1voto

Sean Points 37

Pour continuer à utiliser le code après la validation, j'utilise l'exemple suivant :

var validCode = 1;
try {
  eval( jsCode );        /* Code test */
} catch (e) {
  if (e instanceof SyntaxError) {
    validCode = 0;
    console.warn(e.message);
  }
} finally {
  if(validCode){
    "do some magic"
  }
}

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X