Dans JavaScript, vous pouvez utiliser la fonction EVAL () pour analyser le code JavaScript dans une chaîne et renvoyer le résultat d'exécution du code correspondant:
La copie de code est la suivante:
console.log (EVAL ("42 * 2")); // 84
Eval () est essentiellement fonction d'un objet global javascript. Par exemple, le code ci-dessus est équivalent à:
La copie de code est la suivante:
console.log (this.eval ("42 * 2")); // 84
Cependant, lors de l'utilisation de l'instruction EVAL (), la première méthode mentionnée ci-dessus est généralement adoptée, c'est-à-dire ignorer l'objet global et utiliser directement EVAL ().
Utilisation d'Eval ()
Pour les deux raisons suivantes, sauf si vous en avez vraiment besoin, vous devriez essayer d'éviter d'utiliser l'instruction EVAL () dans votre code:
1. Logiquement parlant, les chaînes doivent être utilisées pour stocker le contenu et les informations pendant le fonctionnement du programme, plutôt que pour stocker une logique de calcul spécifique.
2. Étant donné que le paramètre EVAL () est une chaîne et qu'il ne peut pas être lexical pour un morceau de chaîne, l'interprète JavaScript ne peut pas optimiser pour l'instruction EVAL ().
Valeur de retour d'Eval ()
La valeur de retour d'Eval () suit les règles suivantes:
1. Si le paramètre d'Eval () n'est pas une chaîne, EVAL () renvoie directement le paramètre.
2. Si le paramètre d'Eval () est une chaîne, alors EVAL () analyse la chaîne en code et l'exécute, et renvoie le résultat de la dernière ligne d'exécution de code.
3. Si la chaîne ne peut pas être analysée en code légitime, EVAL () lancera une erreur de syntaxerror.
4. Si une chaîne peut être analysée en code légal, mais qu'une erreur est signalée lors de l'exécution de ce code, l'erreur sera signalée à l'instruction EVAL () et lancée par EVAL ().
La copie de code est la suivante:
console.log (EVAL ([1,2,3])); // [1, 2, 3]
console.log (typeof eval ([1,2,3])); // objet
Console.log (Eval ("42 * / 2")); // Syntaxerror
Console.log (Eval ("42 * 2; 22 * 3;")); // 66. EVAL renvoie le résultat de la dernière expression / déclaration
Console.log (EVAL ("NULL.TOSTRING ()")); // TypeError, l'exception dans l'évaluation du code sera propagée à l'extérieur de l'évalue ().
environnement variable
EVAL () dans JavaScript a une fonctionnalité importante: le code dans la chaîne de paramètre EVAL () peut accéder aux variables dans le code externe et peut également exposer les variables nouvellement créées dans le code de chaîne de paramètre au code externe. Autrement dit, si la chaîne de paramètre EVAM () peut être légalement analysée, JS remplacera le code analysé par la ligne où se trouve Eval ():
La copie de code est la suivante:
// Environnement variable
var a = 108;
Console.log (EVAL ("fonction double (x) {return x * 2;} a = double (a)"));
console.log (a); // 216
console.log (double (33)); // 66
Il convient de noter que la condition préalable à la mise en œuvre de la fonctionnalité ci-dessus est que le code de la chaîne de paramètre EVAL () peut être légalement analysé. En plus de la syntaxe du code correct, JS exige également que le code de la chaîne de paramètre EVAL () doit être "auto-organisé": le code ne doit avoir du sens qu'en termes de code dans la chaîne de paramètre. Par exemple, il est impossible de passer une chaîne telle que «retour»; à la fonction eval ():
La copie de code est la suivante:
fonction test () {
var s = "test";
eval ("retour s;");
}
test (); // syntaxerror: return pas en fonction
Si vous utilisez directement la fonction EVAL (), les variables accessibles par le code dans la chaîne de paramètre EVAL () sont les variables de la fonction où se trouve l'instruction EVAL (), c'est-à-dire l'environnement variable utilisé par la fonction EVAL () est le "environnement variable local". Si vous n'utilisez pas directement la fonction EVAL (), mais utilisez une nouvelle variable qui pointe également vers la fonction EVAL (), alors les variables accessibles par le code dans la chaîne de paramètre correspondante sont des variables globales, c'est-à-dire l'environnement variable utilisé par la fonction EVAL () est un "environnement variable global":
La copie de code est la suivante:
// Environnement variable local et environnement variable global
var renommé = EVAL;
var x = "origine", y = "origine";
fonction f () {
var x = "new";
eval ("x + = 'changé';");
retour x;
}
fonction g () {
var y = "new";
renommé ("y + = 'changé';");
retour y;
}
console.log (f (), x); //
console.log (g (), y); // new Originchanged
Cependant, il convient de noter que le comportement dans IE6, 7 et 8 est différent. Dans IE6, 7 et 8, même si la fonction EVAL () est renommée, "l'environnement variable local" est toujours utilisé.