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():
neue Funktion():
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!