„Wenn ein Arbeiter seine Arbeit gut machen will, muss er zuerst seine Werkzeuge schärfen.“ – Konfuzius, „Die Gespräche des Konfuzius. Lu Linggong“
Titelseite > Programmierung > Sind „eval()“ und „new Function()“ in JavaScript wirklich austauschbar?

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

Veröffentlicht am 20.11.2024
Durchsuche:844

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

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

In JavaScript stoßen wir oft 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 verfügt über die Fähigkeit, auf lokale Variablen zuzugreifen.
  • new Function(): Konstruiert ein Funktionsobjekt aus einer Zeichenfolge, die JavaScript-Code enthält. Diese Funktion wird in einem separaten Bereich ausgeführt und ist somit von lokalen Variablen isoliert.

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);')() würde die lokale Variable 'a' unverändert bleiben.

Implikationen und Vorsichtsmaßnahmen

While Obwohl sowohl eval() als auch new Function() ihren Zweck erfüllen, ist es wichtig zu beachten, dass eval() inhärente Sicherheitsrisiken birgt. 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.

Neuestes Tutorial Mehr>

Haftungsausschluss: Alle bereitgestellten Ressourcen stammen teilweise aus dem Internet. Wenn eine Verletzung Ihres Urheberrechts oder anderer Rechte und Interessen vorliegt, erläutern Sie bitte die detaillierten Gründe und legen Sie einen Nachweis des Urheberrechts oder Ihrer Rechte und Interessen vor und senden Sie ihn dann an die E-Mail-Adresse: [email protected] Wir werden die Angelegenheit so schnell wie möglich für Sie erledigen.

Copyright© 2022 湘ICP备2022001581号-3