"Si un ouvrier veut bien faire son travail, il doit d'abord affûter ses outils." - Confucius, "Les Entretiens de Confucius. Lu Linggong"
Page de garde > La programmation > `eval()` et `new Function()` sont-ils vraiment interchangeables en JavaScript ?

`eval()` et `new Function()` sont-ils vraiment interchangeables en JavaScript ?

Publié le 2024-11-20
Parcourir:111

Are `eval()` and `new Function()` Truly Interchangeable in JavaScript?

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

  • eval() : interprète une chaîne en tant qu'expression JavaScript dans la portée d'exécution actuelle. Il possède la capacité d'accéder aux variables locales.
  • new Function() : Construit un objet fonction à partir d'une chaîne contenant du code JavaScript. Cette fonction s'exécute dans une portée distincte, l'isolant des variables locales.

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.

Dernier tutoriel Plus>

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