Maison > interface Web > js tutoriel > le corps du texte

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

Patricia Arquette
Libérer: 2024-11-02 11:01:02
original
226 Les gens l'ont consulté

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 à 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'));
Copier après la connexion

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étations 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
}
Copier après la connexion

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' restent inchangés.

Implications et mises en garde

Bien que eval() et new Function() servent leurs objectifs, il est crucial de noter que eval() comporte une sécurité inhérente. risques. 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.

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal