Maison  >  Article  >  interface Web  >  Eval() vs New Function() : font-ils vraiment la même chose ?

Eval() vs New Function() : font-ils vraiment la même chose ?

Barbara Streisand
Barbara Streisandoriginal
2024-11-03 00:11:29330parcourir

Eval() vs. New Function(): Do They Really Do the Same Thing?

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() :

    • Évalue la chaîne en tant qu'expression JavaScript dans la portée actuelle.
    • A accès aux variables locales définies dans le bloc de code environnant.
  • nouvelle fonction():

    • Analyse la chaîne en un objet fonction.
    • Exécute la fonction dans une portée distincte, en l'isolant des variables locales du code environnant.

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!

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