Maison  >  Article  >  interface Web  >  Introduction à l'utilisation de la fonction eval() dans les compétences JavaScript_javascript

Introduction à l'utilisation de la fonction eval() dans les compétences JavaScript_javascript

WBOY
WBOYoriginal
2016-05-16 16:23:081417parcourir

En JavaScript, vous pouvez utiliser la fonction eval() pour analyser le code JavaScript dans la chaîne et renvoyer le résultat de l'exécution du code correspondant :


Copier le code Le code est le suivant :

console.log(eval("42 * 2"));//84


Essentiellement, eval() est une fonction de l'objet global JavaScript. Par exemple, le code ci-dessus est équivalent à :


Copier le code Le code est le suivant :

console.log(this.eval("42 * 2"));//84


Cependant, lors de l'utilisation de l'instruction eval(), la première méthode ci-dessus est généralement adoptée, c'est-à-dire ignorer l'objet global et utiliser directement eval().

Utilisation de eval()

Pour les deux raisons suivantes, vous devriez essayer d'éviter d'utiliser l'instruction eval() dans votre code à moins que cela ne soit vraiment nécessaire : ​​

1. Logiquement parlant, les chaînes doivent être utilisées pour stocker du contenu et des informations pendant l'exécution du programme, et ne doivent pas être utilisées pour stocker une logique de calcul spécifique.
2. Étant donné que le paramètre eval() est une chaîne et qu'une chaîne ne peut pas être traitée lexicalement, l'interpréteur JavaScript ne peut pas optimiser l'instruction d'appel eval().

Valeur de retour de eval()

La valeur de retour de eval() suit les règles suivantes :

1. Si le paramètre de eval() n'est pas une chaîne, alors eval() renverra le paramètre directement.
2. Si le paramètre de 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égal, eval() lancera une SyntaxError.
4. Si la 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, alors l'erreur sera signalée à l'instruction eval() et renvoyée par eval().

Copier le code Le code est le suivant :

console.log(eval([1,2,3]));//[1, 2, 3]
console.log(typeof eval([1,2,3]));//object

console.log(eval("42 */ 2"));//SyntaxError
console.log(eval("42 * 2; 22 * ​​​​​​3;"));//66. eval renvoie le résultat de la dernière expression/instruction
console.log(eval("null.toString()"));//TypeError, l'exception dans le code eval sera propagée en dehors de eval().

Environnement variable

Eval() en JavaScript a une fonctionnalité importante : le code dans la chaîne de paramètres eval() peut accéder aux variables du code externe, et peut également exposer les variables nouvellement créées dans le code de la chaîne de paramètres au code externe. Autrement dit, si la chaîne de paramètres eval() peut être analysée légalement, alors JS remplacera la ligne où se trouve eval() par le code analysé :

Copier le code Le code est le suivant :

//environnement variable
var a = 108;
console.log(eval("function 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 pour réaliser les fonctionnalités ci-dessus est que le code dans la chaîne de paramètres eval() puisse être légalement analysé. En plus de la syntaxe correcte du code, JS exige également que le code dans la chaîne de paramètres eval() soit « autonome » : le code doit avoir un sens uniquement en ce qui concerne le code dans la chaîne de paramètres. Par exemple, vous ne pouvez pas transmettre une chaîne telle que "return;" à la fonction eval() :


Copier le code Le code est le suivant :

fonction test(){
var s = "test";
eval("retour s;");
>
test();//SyntaxError : retour pas en fonction


Si la fonction eval() est utilisée directement, les variables auxquelles accède le code dans la chaîne de paramètres eval() sont les variables de la fonction où se trouve l'instruction eval(), c'est-à-dire l'environnement variable utilisé par eval(). la fonction est "l'environnement de variable locale". 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ètres correspondante sont des variables globales, c'est-à-dire les variables utilisées par la fonction eval(). L'environnement est "l'environnement variable global" :

.


Copier le code Le code est le suivant :

//environnement de variable locale et environnement de variable globale
var renommé = eval;
var x = "origine", y = "origine";
fonction f(){
var x = "nouveau";
eval("x = 'Modifié';");
Retourner x ;
>
fonction g(){
var y = "nouveau";
renamed("y = 'Changed';");
retourner y ;
>
console.log(f(), x);//newChanged origin
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 de variable locale » est toujours utilisé.

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