Maison > Article > interface Web > Eval() vs New Function() : font-ils vraiment la même chose ?
Explorer la différence entre eval() et new Function()
En JavaScript, eval() et new Function() sont souvent comparés pour comprendre leurs similitudes et leurs différences. Cet article examine s'ils effectuent la même tâche et fournit une explication détaillée de leurs comportements distincts.
Exemples de code
Considérez l'extrait de code suivant :
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'));
Dans ce code,estimate() utilise eval() pour évaluer une chaîne en tant qu'expression JavaScript, tandis que func() utilise le nouveau constructeur Function() pour créer un objet fonction à partir d'une chaîne et l'exécute immédiatement.
Fonctionnalités distinctes
Bien que les deux fonctions évaluent des chaînes, elles n'effectuent pas la même tâche. Voici les principales différences :
eval() :
nouvelle fonction():
Exemple pour mettre en évidence les différences
Considérez le code suivant :
function test1() { var a = 11; eval('(a = 22)'); alert(a); // alerts 22 }
Si new Function('return (a = 22);')() ont été utilisés à la place de eval (), la variable locale a conserverait sa valeur d'origine car new Function() n'accède pas aux variables locales de la portée environnante.
Recommandations et considérations de sécurité
Certaines Les développeurs JavaScript, tels que Douglas Crockford, déconseillent d'utiliser eval() et new Function() sauf en cas d'absolue nécessité. Cette recommandation découle de problèmes de sécurité, car évaluer des données non fiables avec l'une ou l'autre fonction peut être risqué.
Par conséquent, il est généralement conseillé d'explorer des méthodes alternatives pour évaluer et exécuter du code JavaScript avant de recourir à eval() ou new Function( ).
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!