Heim  >  Artikel  >  Web-Frontend  >  Wann sollten Sie „eval()“ vs. „new Function()“ in JavaScript verwenden?

Wann sollten Sie „eval()“ vs. „new Function()“ in JavaScript verwenden?

Patricia Arquette
Patricia ArquetteOriginal
2024-11-02 10:58:02940Durchsuche

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

Sind eval() und new Function() in JavaScript austauschbar?

Beim Arbeiten mit Zeichenfolgen, die JavaScript-Code enthalten, treten häufig zwei Funktionen auf: eval() und new Function(). Obwohl beide in einer Zeichenfolge eingebetteten Code ausführen können, weisen sie unterschiedliche Merkmale und Verhaltensweisen auf.

eval() vs. new Function(): Die wichtigsten Unterschiede

  • Geltungsbereich: Der Hauptunterschied liegt in ihrem Geltungsbereich. eval() wertet den Code innerhalb des aktuellen Ausführungsbereichs aus, was bedeutet, dass er Zugriff auf lokale Variablen hat. Andererseits erstellt new Function() einen neuen Bereich und kann nicht direkt auf lokale Variablen zugreifen.
  • Sicherheit: eval() ist berüchtigt für Sicherheitslücken. Es ermöglicht die Auswertung von beliebigem Code, der zur Ausführung von Schadcode führen könnte, wenn die Eingabezeichenfolge nicht vertrauenswürdig ist. new Function() ist sicherer, da es den Code in ein Funktionsobjekt analysiert, das in einem separaten Bereich ausgeführt wird.

Das Code-Snippet verstehen

Das Code-Snippet Sie haben die unterschiedlichen Verhaltensweisen von eval() und new Function() demonstriert:

<code class="javascript">var evaluate = function(string) {
    return eval('(' + string + ')');
}

var func = function(string) {
    return (new Function( 'return (' + string + ')' )());
}</code>

Beide Funktionen werten die Zeichenfolge „2 1“ aus und geben das Ergebnis zurück. Wenn Sie jedoch den Code ändern, um eine lokale Variable „a“ in die Funktion aufzunehmen, werden Sie feststellen, dass eval() auf die lokale Variable zugreifen und diese ändern kann, new Function() hingegen nicht.

Vorsichtsmaßnahmen und Best Practices

Eval() und new Function() bieten zwar praktische Möglichkeiten zum Ausführen von dynamischem Code, sollten jedoch mit Vorsicht verwendet werden:

  • Vermeiden eval(): Von eval() wird im Allgemeinen aufgrund von Sicherheitsrisiken und Leistungsbedenken abgeraten.
  • Verwenden Sie new Function() mit Vorsicht: new Function() ist sicherer als eval( ), kann aber dennoch anfällig für Injektionsangriffe sein.
  • Eingabe bereinigen: Stellen Sie immer sicher, dass der Code, den Sie über eval() oder new Function() ausführen, bereinigt und vertrauenswürdig ist.

In den meisten Fällen wird empfohlen, sich für die dynamische Codeausführung auf etablierte JavaScript-Sprachfunktionen zu verlassen, wie z. B. Vorlagenliterale oder den Funktionskonstruktor ohne neue.

Das obige ist der detaillierte Inhalt vonWann sollten Sie „eval()“ vs. „new Function()“ in JavaScript verwenden?. 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