Maison  >  Article  >  interface Web  >  Quand devriez-vous utiliser `eval()` plutôt que `new Function()` en JavaScript ?

Quand devriez-vous utiliser `eval()` plutôt que `new Function()` en JavaScript ?

Patricia Arquette
Patricia Arquetteoriginal
2024-11-02 10:58:02940parcourir

 When Should You Use `eval()` vs `new Function()` in JavaScript?

Eval() et new Function() sont-ils interchangeables en JavaScript ?

Lorsque vous travaillez avec des chaînes contenant du code JavaScript, deux fonctions apparaissent généralement : eval() et new Function(). Bien que les deux puissent exécuter du code intégré dans une chaîne, ils présentent des caractéristiques et un comportement distincts.

eval() vs new Function() : les principales différences

  • Portée : La principale différence réside dans leur portée. eval() évalue le code dans la portée d'exécution actuelle, ce qui signifie qu'il a accès aux variables locales. D'un autre côté, new Function() crée une nouvelle portée et ne peut pas accéder directement aux variables locales.
  • Sécurité : eval() est connu pour ses failles de sécurité. Il permet l'évaluation de code arbitraire, ce qui pourrait conduire à l'exécution de code malveillant si la chaîne d'entrée n'est pas fiable. new Function() est plus sûr car il analyse le code dans un objet fonction qui s'exécute dans une portée distincte.

Comprendre l'extrait de code

L'extrait de code que vous avez fourni démontre les différents comportements de eval() et new Function() :

<code class="javascript">var evaluate = function(string) {
    return eval('(' + string + ')');
}

var func = function(string) {
    return (new Function( 'return (' + string + ')' )());
}</code>

Les deux fonctions évaluent la chaîne "2 1" et renvoient le résultat. Cependant, si vous modifiez le code pour inclure une variable locale "a" dans la fonction, vous observerez que eval() peut accéder et modifier la variable locale, alors que new Function() ne le fera pas.

Précautions et bonnes pratiques

Bien que eval() et new Function() offrent des moyens pratiques d'exécuter du code dynamique, ils doivent être utilisés avec prudence :

  • Éviter eval() : eval() est généralement déconseillé en raison de risques de sécurité et de problèmes de performances.
  • Utilisez new Function() avec précaution : new Function() est plus sûr que eval( ), mais il peut toujours être sensible aux attaques par injection.
  • Sanitize input : Assurez-vous toujours que le code que vous exécutez via eval() ou new Function() est nettoyé et approuvé.

Dans la plupart des cas, il est recommandé de s'appuyer sur les fonctionnalités établies du langage JavaScript pour l'exécution dynamique de code, telles que les littéraux de modèle ou le constructeur de fonction sans new.

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