Heim  >  Artikel  >  Web-Frontend  >  Eval() vs. New Function(): Machen sie wirklich dasselbe?

Eval() vs. New Function(): Machen sie wirklich dasselbe?

Barbara Streisand
Barbara StreisandOriginal
2024-11-03 00:11:29330Durchsuche

Eval() vs. New Function(): Do They Really Do the Same Thing?

Untersuchung des Unterschieds zwischen eval() und new Function()

In JavaScript werden eval() und new Function() oft verglichen ihre Gemeinsamkeiten und Unterschiede zu verstehen. In diesem Artikel wird untersucht, ob sie dieselbe Aufgabe ausführen, und es wird eine detaillierte Erklärung ihres unterschiedlichen Verhaltens gegeben.

Codebeispiele

Beachten Sie den folgenden Codeausschnitt:

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

In diesem Code verwendet „evaluate()“ eval(), um einen String als JavaScript-Ausdruck auszuwerten, während func() den neuen Function()-Konstruktor verwendet, um ein Funktionsobjekt aus einem String zu erstellen und es sofort auszuführen.

Eindeutige Funktionalität

Während beide Funktionen Zeichenfolgen auswerten, führen sie nicht die gleiche Aufgabe aus. Hier sind die wichtigsten Unterschiede:

  • eval():

    • Wertet die Zeichenfolge als JavaScript-Ausdruck im aktuellen Bereich aus.
    • Hat Zugriff auf lokale Variablen, die im umgebenden Codeblock definiert sind.
  • neue Funktion():

    • Parst die Zeichenfolge in ein Funktionsobjekt.
    • Führt die Funktion in einem separaten Bereich aus und isoliert sie von lokalen Variablen des umgebenden Codes.

Beispiel zum Hervorheben von Unterschieden

Beachten Sie den folgenden Code:

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

Wenn new Function('return (a = 22);')() anstelle von eval verwendet würden () würde die lokale Variable a ihren ursprünglichen Wert behalten, da new Function() nicht auf lokale Variablen aus dem umgebenden Bereich zugreift.

Empfehlungen und Sicherheitsüberlegungen

Einige JavaScript-Entwickler wie Douglas Crockford plädieren gegen die Verwendung von eval() und new Function(), sofern dies nicht unbedingt erforderlich ist. Diese Empfehlung ergibt sich aus Sicherheitsbedenken, da die Auswertung nicht vertrauenswürdiger Daten mit beiden Funktionen riskant sein kann.

Daher ist es generell ratsam, alternative Methoden zur Auswertung und Ausführung von JavaScript-Code zu erkunden, bevor Sie auf eval() oder new Function( zurückgreifen. ).

Das obige ist der detaillierte Inhalt vonEval() vs. New Function(): Machen sie wirklich dasselbe?. 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