In JavaScript können Sie die Funktion eval() verwenden, um den JavaScript-Code in der Zeichenfolge zu analysieren und das entsprechende Codeausführungsergebnis zurückzugeben:
Im Wesentlichen ist eval() eine Funktion des globalen JavaScript-Objekts. Der obige Code entspricht beispielsweise:
Bei Verwendung der Anweisung eval () wird jedoch im Allgemeinen die erste oben genannte Methode angewendet, dh das globale Objekt wird ignoriert und eval () direkt verwendet.
Verwendung von eval()
Aus den folgenden zwei Gründen sollten Sie versuchen, die Verwendung der eval()-Anweisung in Ihrem Code zu vermeiden, es sei denn, dies ist wirklich notwendig:
1. Logischerweise sollten Zeichenfolgen zum Speichern von Inhalten und Informationen während der Programmausführung und nicht zum Speichern spezifischer Berechnungslogik verwendet werden.
2. Da der eval()-Parameter ein String ist und ein String nicht lexikalisch verarbeitet werden kann, kann der JavaScript-Interpreter die eval()-Aufrufanweisung nicht optimieren.
Rückgabewert von eval()
Der Rückgabewert von eval() folgt den folgenden Regeln:
1. Wenn der Parameter von eval() kein String ist, gibt eval() den Parameter direkt zurück.
2. Wenn der Parameter von eval() eine Zeichenfolge ist, analysiert eval() die Zeichenfolge in Code, führt ihn aus und gibt das Ergebnis der letzten Codeausführungszeile zurück.
3. Wenn die Zeichenfolge nicht in legalen Code geparst werden kann, löst eval() einen SyntaxError aus.
4. Wenn die Zeichenfolge in legalen Code geparst werden kann, bei der Ausführung dieses Codes jedoch ein Fehler gemeldet wird, wird der Fehler an die eval()-Anweisung gemeldet und von eval() ausgelöst.
console.log(eval("42 */ 2"));//SyntaxError
console.log(eval("42 * 2; 22 * 3;"));//66. eval gibt das Ergebnis des letzten Ausdrucks/der letzten Aussage zurück
console.log(eval("null.toString()"));//TypeError, Ausnahme im ausgewerteten Code wird außerhalb von eval() weitergegeben.
Variable Umgebung
Eval() in JavaScript verfügt über eine wichtige Funktion: Der Code in der Parameterzeichenfolge eval() kann auf Variablen im externen Code zugreifen und die neu erstellten Variablen im Parameterzeichenfolgencode auch externem Code zugänglich machen. Das heißt, wenn die Parameterzeichenfolge eval() legal analysiert werden kann, ersetzt JS die Zeile, in der sich eval() befindet, durch den analysierten Code:
Es ist erwähnenswert, dass die Voraussetzung für die Realisierung der oben genannten Funktionen darin besteht, dass der Code in der Parameterzeichenfolge eval() legal analysiert werden kann. Neben der korrekten Syntax des Codes verlangt JS auch, dass der Code in der Parameterzeichenfolge eval() „eigenständig“ sein muss: Der Code darf nur für den Code in der Parameterzeichenfolge sinnvoll sein. Sie können beispielsweise keine Zeichenfolge wie „return;“ an die Funktion eval() übergeben:
Wenn die Funktion eval() direkt verwendet wird, sind die Variablen, auf die der Code in der Parameterzeichenfolge eval() zugreift, die Variablen der Funktion, in denen sich die Anweisung eval() befindet, d. h. die von eval() verwendete Variablenumgebung. Funktion ist die „lokale Variablenumgebung“. Wenn Sie die Funktion eval() nicht direkt verwenden, sondern eine neue Variable verwenden, die auch auf die Funktion eval() verweist, sind die Variablen, auf die der Code in der entsprechenden Parameterzeichenfolge zugreift, globale Variablen, also die von verwendeten Variablen die eval()-Funktion. Die Umgebung ist die „globale Variablenumgebung“:
Es ist jedoch zu beachten, dass das Verhalten in IE6, 7 und 8 unterschiedlich ist. In IE6, 7 und 8 wird die „lokale Variablenumgebung“ weiterhin verwendet, auch wenn die Funktion eval() umbenannt wird.