2012-05-06 6 views
20

Ich weiß, dass dies eine neue Frage sein kann, aber ich bin neugierig auf den Hauptvorteil von eval() - wo würde es am besten verwendet werden? Ich schätze jede Info.Was ist der Hauptvorteil der Verwendung von eval() in JavaScript?

+3

möglich Duplikat [Gibt es jemals einen guten Grund, eval() zu benutzen?] (Http://stackoverflow.com/questions/1826859/is-there-ever-a-good-reason-to-use-eval) –

+1

Warum ist dies markiert 'Hausaufgaben'? –

+0

@Derek - danke, behoben – Coffee

Antwort

23

Die Funktion eval wird am besten verwendet: Nie.

Zweck ist es, eine Zeichenfolge als Javascript Ausdruck auszuwerten. Beispiel:

eval('x = 42'); 

Es wird vor viel benutzt worden, weil viele Menschen nicht wissen, wie der richtigen Code zu schreiben, was sie wollten tun. Zum Beispiel, wenn für ein Feld eines dynamischen Name:

eval('document.frm.'+frmName).value = text; 

Der richtige Weg, das zu tun wäre:

document.frm[frmName].value = text; 

Als eval Methode führt die Zeichenfolge als Code wird jedes Mal, wenn sie verwendet ist eine potentielle Öffnung für jemanden, der schädlichen Code in die Seite injiziert. Siehe cross-site scripting.

Es gibt einige legitime Anwendungen für die eval-Funktion.Es ist jedoch unwahrscheinlich, dass Sie jemals in einer Situation sein werden, in der Sie es tatsächlich brauchen werden.

7

eval() sollte nicht in Javascript verwendet werden.

eval() verwendet, um JSON-Strings zu analysieren, aber diese Verwendung wurde durch die schnellere und sicherere JSON.parseJSON ersetzt.

+0

Ah, ich sehe - so ist es eine riskante Funktion - ich werde mehr lesen. Danke, – Coffee

+1

Die 'Eval'-Funktion wurde für viele Dinge verwendet, bevor JSON existierte ... – Guffa

+2

@Guffa: Ja, aber es hätte nicht sein sollen. – SLaks

2

Sie können JS ausführen, das im Wert eines Felds auf der Webseite gespeichert ist.

Sie können Eval mit JS verwenden, es ist nur so, dass Ihr Code mehr Angriffsfähig ist. Solange es AJAX nicht verwendet, gibt es kein Serverproblem.

Wenn Sie eval verwenden, sollten Sie die Zeichen parsen [() <> {}]

+4

Und das ist im Allgemeinen eine schreckliche Idee. – SLaks

+0

JS-Bibliotheken fördern das ständig, also muss es eine gute Übung sein! –

+0

Es ist nicht schlecht, solange Sie es nicht rohe verwenden – PitaJ

1

eval() = evil

Sie sollten es eigentlich gar nicht verwenden. Es kann für die einfache Code-Einfügung verwendet werden, aber jemand kann schlechte Skripts unter Verwendung eval() einfügen. Manchmal verwenden Leute eval() für JSON Parsen oder

eval("obj." + id); //newbies 

aber eigentlich kann man all diese Dinge erreichen, ohne eval() zu verwenden.

obj[id];    //should-do 
+0

Wir alle wissen, dass Sie 'eval' nicht verwenden sollten; Das OP fragte, ob es irgendwelche Vorteile gäbe. –

+0

@ JeffreySweeney - (es gibt keine von denen ich mir vorstellen kann ...) –

+0

Ich weiß, oder? : P Vielleicht könnte es zum Testen der Back-End-Schwachstelle auf einem Testserver oder für Geschwindigkeitstests verwendet werden (da es eine der langsamsten Funktionen in JS ist). –

7

eval macht es möglich (oder bewerten) eine Reihe von JavaScript-Code auszuführen.

So ist es anwendbar, wenn Sie möchten, dass jemand eine Zeichenfolge von Javascript-Code ausführt. Wie zum Beispiel, unter einem pädagogischen Artikel über JavaScript, so kann der Leser es sofort versuchen :)

Oder, wieder, wenn Ihre Website für Programmierer ausgerichtet ist, möchten Sie möglicherweise, dass sie ihre eigenen Plugins schreiben und ausführen.

2

Das beste Ziel bei der Verwendung von Eval ist das dynamische Laden von Code, das Generieren von Code zur Laufzeit und ähnliche Metaprogrammierungen. Im Allgemeinen, wenn Sie dasselbe ohne eval machen können, verwenden Sie eval nicht.

0

Einer der besten Anwendungsfälle mit Eval ist Javascript Logger, in dem Benutzer Javascript in der Laufzeit ausführen kann. zum Beispiel javascript logger ermöglicht dem Benutzer Skript im Logger-Fenster auszuführen.

0

Sie können ein Clientskelett erstellen und es als Basis-App verwenden - Code-Pakete empfangen und dann ausführen - wodurch der Client extrem flexibel wird - der gesamte Code auf dem Server in Paketen. Dies ist jedoch sehr riskant und wenn so etwas benötigt wird, sollten Sie vielleicht Java mit Java-Bundles verwenden. Warum Eval noch in der Sprache ist, ist strittig, es ist ein zu großes Sicherheitsrisiko ist

2

Wie schon vorher gesagt zu verwenden, besteht ein potentielles Risiko bei der Verwendung von eval beteiligt ist(), Wenn Sie Zeichenkette als Ausdruck auswerten möchten Sie kann $ {} verwenden, um Ausdruck zu evaluieren, eingeführt in ECMA-6

11

Dies ist eine ziemlich alte Frage, und vielleicht Leute nicht an Anwendungsfälle für eval() richtig zu der Zeit denken. Eine gute Verwendung für eval() ist für die Implementierung hot Neuladen in Ihrem Back-End-oder Frontend-Entwicklung.

Grundsätzlich eval() kann es Ihnen ermöglichen, Code in Ihrem Editor zu bearbeiten, und es Ihre laufende Anwendung zu patchen, ohne es neu zu starten, und ohne es Zustand verlieren (abhängig von der Implementierung). Sie benötigen zugehörigen Code, der nach Dateiänderungen sucht und die Änderungen an Ihre Anwendung sendet, aber eval() ist letztendlich die Methode, um diese Änderungen in tatsächliche js umzuwandeln.


In diesem Sinne halte ich es für völlig falsch ist, eine Erklärung zu schreiben, wie eval() böse ist, oder nie verwendet werden soll. Pauschalaussagen wie diese sind das wahre Übel!

+0

Dies ist der beste und realste Anwendungsfall, auf den ich stieß. (y) – Ravi

+0

Ordentliche Antwort. Wenn jemand etwas wie ReactJS oder Angular oder NodeJS erstellt, wäre diese Antwort nützlich. =) – HoldOffHunger

0

Vielleicht bin ich falsch, aber ich bin mit ihm eine klassische String in eine ES6 Vorlage Zeichenfolge konvertieren:

let name = 'Daman' 
let classicString = 'Hello ${name}' 
let templateString = eval('`' + classicString + '`') 

Welche gibt mir genau das, was ich brauche:

"Hello Daman" 
Verwandte Themen