Exploration de la distinction : eval() et new Function() sont-ils interchangeables en JavaScript ?
Souvent en JavaScript, nous rencontrons des fonctions comme eval() et new Function(). Bien que leur syntaxe puisse sembler similaire à première vue, un examen plus approfondi révèle des différences fondamentales dans leur comportement.
Considérez les fonctions d'instruction unique suivantes :
var evaluate = function(string) { return eval('(' string ')'); } var func = function(string) { return (new Function( 'return (' string ')' )()); } console.log(evaluate('2 1')); console.log(func('2 1'));
Ces deux fonctions sont-elles identiques dans leurs opérations ? Contrairement à la croyance populaire, ils ne le sont pas.
eval() vs. new Function()
Pour illustrer cette différence, considérons la fonction suivante :
function test1() { var a = 11; eval('(a = 22)'); alert(a); // alerts 22 }
Dans cet exemple, eval() modifie la variable locale 'a' dans la fonction test1(), ce qui entraîne une alerte de 22. Cependant, si nous devions utiliser new Function('return (a = 22);')(), la variable locale 'a' resterait inchangée.
Implications et mises en garde
Alors que les deux eval() et new Function() remplissent leur fonction, il est crucial de noter que eval() comporte des risques de sécurité inhérents. Sa capacité à accéder aux variables locales et potentiellement à modifier la portée globale peut entraîner des conséquences inattendues.
Par conséquent, il est généralement conseillé d'éviter d'utiliser eval() sauf en cas d'absolue nécessité. Les données non fiables transmises dans eval() peuvent compromettre la sécurité de votre application. De même, new Function() doit être utilisé avec prudence lors du traitement d'entrées non fiables.
Clause de non-responsabilité: Toutes les ressources fournies proviennent en partie d'Internet. En cas de violation de vos droits d'auteur ou d'autres droits et intérêts, veuillez expliquer les raisons détaillées et fournir une preuve du droit d'auteur ou des droits et intérêts, puis l'envoyer à l'adresse e-mail : [email protected]. Nous nous en occuperons pour vous dans les plus brefs délais.
Copyright© 2022 湘ICP备2022001581号-3