Heim  >  Artikel  >  Web-Frontend  >  Sind „eval()' und „new Function()' in JavaScript wirklich austauschbar?

Sind „eval()' und „new Function()' in JavaScript wirklich austauschbar?

Patricia Arquette
Patricia ArquetteOriginal
2024-11-02 11:01:02217Durchsuche

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

Eintauchen in die Unterscheidung: Sind eval() und new Function() in JavaScript austauschbar?

Oft stoßen wir in JavaScript auf Funktionen wie eval() und new Function(). Während ihre Syntax auf den ersten Blick ähnlich erscheinen mag, offenbart eine genauere Betrachtung grundlegende Unterschiede in ihrem Verhalten.

Betrachten Sie die folgenden Einzelanweisungsfunktionen:

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'));

Sind diese beiden Funktionen in ihren Operationen identisch? ? Entgegen der landläufigen Meinung ist dies nicht der Fall.

eval() vs. new Function()

  • eval(): Interpretiert eine Zeichenfolge als JavaScript-Ausdruck innerhalb des aktuellen Ausführungsbereichs. Es besitzt die Fähigkeit, auf lokale Variablen zuzugreifen.
  • new Function(): Konstruiert ein Funktionsobjekt aus einer Zeichenfolge, die JavaScript-Code enthält. Diese Funktion läuft in einem separaten Bereich und isoliert sie von lokalen Variablen.

Um diesen Unterschied zu veranschaulichen, betrachten Sie die folgende Funktion:

function test1() {
    var a = 11;
    eval('(a = 22)');
    alert(a);            // alerts 22
}

In diesem Beispiel ändert eval() die lokale Variable 'a' innerhalb der Funktion test1(), was zu einer Warnung von 22 führt. Wenn wir jedoch new Function('return (a = 22);')() verwenden würden, würde dies die lokale Variable 'a' tun bleiben unverändert.

Implikationen und Vorsichtsmaßnahmen

Während sowohl eval() als auch new Function() ihren Zweck erfüllen, ist es wichtig zu beachten, dass eval() inhärente Sicherheit mit sich bringt Risiken. Seine Fähigkeit, auf lokale Variablen zuzugreifen und möglicherweise den globalen Gültigkeitsbereich zu ändern, kann zu unbeabsichtigten Konsequenzen führen.

Daher wird allgemein empfohlen, die Verwendung von eval() zu vermeiden, es sei denn, dies ist unbedingt erforderlich. Nicht vertrauenswürdige Daten, die an eval() übergeben werden, können die Sicherheit Ihrer Anwendung gefährden. Ebenso sollte new Function() bei der Verarbeitung nicht vertrauenswürdiger Eingaben mit Vorsicht eingesetzt werden.

Das obige ist der detaillierte Inhalt vonSind „eval()' und „new Function()' in JavaScript wirklich austauschbar?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn