Heim > Web-Frontend > js-Tutorial > Wann sollte „eval()' vs. „new Function()' in JavaScript verwendet werden?

Wann sollte „eval()' vs. „new Function()' in JavaScript verwendet werden?

Patricia Arquette
Freigeben: 2024-11-04 16:07:02
Original
435 Leute haben es durchsucht

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

Unterscheidung von eval() und new Function() in JavaScript

In JavaScript stoßen Entwickler häufig auf zwei Funktionen, die scheinbar eine ähnliche Aufgabe ausführen : eval() und new Function(). Während beide Funktionen Zeichenfolgen als Code auswerten, unterscheiden sich ihre zugrunde liegenden Mechanismen und Auswirkungen erheblich.

eval() vs. new Function()

Die Funktion eval() wertet a aus string als JavaScript-Ausdruck innerhalb des aktuellen Ausführungsbereichs. Dies bedeutet, dass es Zugriff auf lokale Variablen hat, die im aktuellen Bereich definiert sind. Im Gegensatz dazu analysiert new Function() den in einem String gespeicherten JavaScript-Code in ein Funktionsobjekt, das dann aufgerufen werden kann. Dieses Funktionsobjekt wird in einem separaten Bereich erstellt und kann daher nicht auf lokale Variablen der aufrufenden Umgebung zugreifen.

Beispiel

Um diese Unterscheidung zu veranschaulichen, betrachten Sie den folgenden Code:

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'));
Nach dem Login kopieren

Beide Funktionen geben das erwartete Ergebnis von 3 aus. Wenn wir jedoch den Code ändern, um lokale Variablen zu verwenden, wird der Unterschied deutlich:

function test1() {
    var a = 11;
    eval('(a = 22)'); // Modifies the local variable within the `test1` function
    alert(a);            // Alerts 22
}
Nach dem Login kopieren

In diesem Fall using eval() würde die lokale Variable a ändern, da die Auswertung innerhalb des Gültigkeitsbereichs der Funktion test1 erfolgt. Wenn wir jedoch stattdessen new Function('return (a = 22);')() verwenden würden, bliebe die lokale Variable a unberührt, da der Code in einem separaten Bereich ausgeführt wird.

Sicherheit und Überlegungen

Es ist wichtig zu beachten, dass eval() und new Function() Sicherheitsrisiken bergen können, wenn sie mit nicht vertrauenswürdigen Daten verwendet werden. Durch böswillige Eingaben können möglicherweise vertrauliche Informationen offengelegt oder willkürlicher Code ausgeführt werden. Daher wird dringend davon abgeraten, diese Funktionen zu verwenden, es sei denn, dies ist unbedingt erforderlich.

Fazit

Zusammenfassend lässt sich sagen, dass eval() und new Function() in JavaScript unterschiedlich funktionieren. eval() wertet Zeichenfolgen innerhalb des aktuellen Ausführungsbereichs aus, während new Function() einen neuen Bereich für die Auswertung erstellt. Das Verständnis dieser Unterscheidung ist für eine effektive JavaScript-Programmierung und die Aufrechterhaltung der Sicherheit von entscheidender Bedeutung.

Das obige ist der detaillierte Inhalt vonWann sollte „eval()' vs. „new Function()' in JavaScript verwendet werden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage