web-dev-qa-db-fra.com

eval javascript, recherche d'erreur de syntaxe

Je voulais savoir s'il est possible de trouver par le biais de javascript si un appel à eval () comporte une erreur de syntaxe ou une variable non définie, etc. de cette eval?

36
Jesus Ramos

Vous pouvez tester pour voir si une erreur est bien une SyntaxError.

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

Lors de l'utilisation de catch pour détecter un type d'erreur particulier, vous devez vous assurer que les autres types d'exceptions ne sont pas supprimés. Sinon, si le code évalué lève un type d'exception différent, il peut disparaître et provoquer un comportement inattendu du code.

Je suggérerais d'écrire du code comme ceci:

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

Veuillez noter la section "else".

11
RandomX

Vous pouvez utiliser JsLint qui contient un analyseur 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 ...

2
Pablo Grisafi

Selon la documentation Mozilla pour eval :

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

Donc, je pense que vous n’avez peut-être pas de chance. Ce même document recommande également de ne pas utiliser eval:

eval () est une fonction dangereuse, qui exécute le code transmis avec les privilèges de l'appelant. Si vous exécutez eval () avec une chaîne susceptible d'être affectée par une partie malveillante, vous risquez peut-être d'exécuter du code malveillant sur la machine de l'utilisateur avec les autorisations de votre page Web/extension. Plus important encore, le code tiers peut voir l'étendue dans laquelle eval () a été invoquée, ce qui peut conduire à des attaques potentielles dont la fonction similaire n'est pas susceptible.

Alors, peu importe, soyez conscient des risques avant d'utiliser cette fonction.

0
Justin Ethier