Heim  >  Artikel  >  Web-Frontend  >  Ausführliche Erläuterung der Verwendung von eval in JavaScript

Ausführliche Erläuterung der Verwendung von eval in JavaScript

黄舟
黄舟Original
2017-11-23 11:00:081976Durchsuche

Ich glaube, dass viele Freunde in unserer täglichen Entwicklungsarbeit mit der Verwendung von eval in JavaScript vertraut sind, aber für diejenigen, die neu bei JavaScript sind, ist die Verwendung von eval etwas ungewohnt. Heute werden wir es tun Geben Sie eine detaillierte Erklärung zur Verwendung von eval in JavaScript! Die

eval-Funktion empfängt einen Parameter s. Wenn s kein String ist, gibt sie s direkt zurück. Andernfalls führen Sie die s-Anweisung aus. Wenn das Ausführungsergebnis der s-Anweisung ein Wert ist, wird dieser Wert zurückgegeben, andernfalls wird undefiniert zurückgegeben.
Es ist wichtig zu beachten, dass die Objektdeklarationssyntax „{}“ keinen Wert zurückgeben kann. Sie muss in Klammern eingeschlossen werden, um einen Wert zurückzugeben:

Der Code lautet wie folgt:

var code1='"a" + 2'; //表达式 
varcode2='{a:2}'; //语句 
alert(eval(code1)); //->'a2' 
alert(eval(code2)); //->undefined 
alert(eval('(' + code2 + ')')); //->[object Object]

Wie Sie sehen, wird die Objektdeklarationsanweisung nur ausgeführt und kann keinen Wert zurückgeben. Um die häufig verwendete Objektdeklarationsanweisung „{}“ zurückzugeben, muss sie in Klammern eingeschlossen werden, um sie in einen Ausdruck umzuwandeln, bevor ihr Wert zurückgegeben werden kann. Dies ist auch eines der Grundprinzipien der Verwendung von JSON für die Ajax-Entwicklung. Im Beispiel ist deutlich zu erkennen, dass die zweite Alert-Anweisung undefiniert ausgibt, während die dritte nach dem Hinzufügen von Klammern das durch die Anweisung dargestellte Objekt ausgibt.
Lassen Sie uns nun über den Schwerpunkt dieses Artikels sprechen, wie man globalen Code innerhalb einer Funktion ausführt. Um dieses Problem zu veranschaulichen, schauen wir uns zunächst ein Beispiel an:

Der Code lautet wie folgt:

var s='global'; //定义一个全局变量 
function demo1(){ 
eval('var s="local"'); 
} 
demo1(); 
alert(s); //->global

Die obige Demo1-Funktion ist äquivalent zu: function demo1(){var s ='local';}, das eine lokale Variable s definiert.
Es ist also nicht verwunderlich, dass die endgültige Ausgabe global ist. Schließlich kann jeder klar zwischen lokalen Variablen und globalen Variablen unterscheiden.
Wenn Sie es sorgfältig prüfen, können Sie die Eigenschaften der Auswertungsfunktion finden. Sie wird immer innerhalb des Kontextvariablenraums (auch Paket, Abschluss genannt) ausgeführt. Dies gilt unabhängig davon, ob es sich um eine Variablendefinition handelt oder eine Funktionsdefinition, also wie folgt: Der Code generiert einen Fehler einer undefinierten Funktion:

Der Code lautet wie folgt:

var s='function test(){return 1;}'; //一个函数定义语句 
function demo2(){ 
eval(s); 
} 
demo2(); 
alert(test()); //->error:test is not defined

Dies liegt daran, dass die Testfunktion definiert ist im lokalen Raum und kann innerhalb der Funktion demo2 aufgerufen werden, jedoch nicht von außen.
In der tatsächlichen Ajax-Entwicklung müssen wir manchmal dynamisch Code vom Server zur Ausführung abrufen, um das Problem zu lindern, dass zu viel Code auf einmal geladen wird, oder einige Codes werden von Javascript selbst generiert und wir hoffen, die Eval-Funktion zu verwenden Ausführung.
Eine solche dynamische Codeerfassung erfolgt jedoch normalerweise innerhalb einer Funktion, zum Beispiel:

Der Code lautet wie folgt:

function loadCode(){ 
varcode=getCode(); 
eval(code); 
}

Es ist ersichtlich, dass eval nicht möglich ist Dies hat im globalen Raum viele Probleme mit sich gebracht, und ich habe viele Menschen erlebt, die dadurch frustriert waren.
Aber jetzt habe ich endlich eine Lösung gefunden. Hey, es kann gleichzeitig mit IE und Firefox kompatibel sein. Die Methode ist wie folgt:

Der Code ist wie folgt:

var X2={} //my namespace:) 
X2.Eval=function(code){ 
if(!!(window.attachEvent && !window.opera)){ 
//ie 
execScript(code); 
}else{ 
//not ie 
window.eval(code); 
} 
}

Wenn Sie nun globalen Code innerhalb einer Funktion definieren möchten, können Sie die globale Variable s="local" aufrufen.
Es ist zu beachten, dass X2.Eval keinen Wert zurückgibt. Wenn Sie einen Ausdruck auswerten möchten, sollten Sie dennoch die Eval-Funktion des Systems verwenden. X2.Eval ist nur für die globale Codedefinition vorgesehen.

Nachdem einige Leute das gesehen haben, denken sie vielleicht, dass das Problem zu einfach zu lösen ist, haha, aber das Finden dieser Methode erfordert etwas Glück und Fähigkeiten:

(1) Für

IE-Browser
var s='global'; 
function demo3(){ 
X2.Eval('var s="local"'); 
} 
demo3(); 
alert(s); //->'local'
, Eine solche Funktion wurde standardmäßig bereitgestellt: execScript, die zum Ausführen von Code im globalen Raum verwendet wird, aber nicht viele Leute wissen davon.

(2) Wenn beim Firefox-Browser die Eval-Funktion direkt aufgerufen wird, wird sie im Bereich des Aufrufers ausgeführt. Wenn window.eval aufgerufen wird, wird sie im globalen Bereich ausgeführt. Es gibt wahrscheinlich noch weniger Leute, die das wissen. Immerhin gibt Alert(eval==window.eval) true zurück!
Die Eigenschaften der Eval-Funktion von Firefox sind in der Tat sehr seltsam, aber ihre Quelle kann auch in der JavaScript-Spezifikation gefunden werden:

Dies bedeutet, dass die Ausführung der Eval-Funktion damit zusammenhängt an den Aufrufer, spricht aber nicht über seinen Ausführungskontext. Es ist also schwer zu sagen, was zwischen IE und Firefox richtig oder falsch ist. Es ist gut, dass jeder die Lösung kennt.


If value of the eval property is used in any way other than a direct call (that is, other than by the explicit use of its 
name as an Identifier which is the MemberExpression in a CallExpression), or if the eval property is assigned to, 
an EvalError exception may be thrown.
Zusammenfassung:


Dieser Artikel zeigt Ihnen die Verwendung von eval in JavaScript anhand konkreter Beispiele, mit denen Freunde vertraut sind Ich habe mehr Verständnis und Verständnis für seine Verwendung und hoffe, dass es für Ihre Arbeit hilfreich sein wird! Verwandte Empfehlungen:

Detaillierte Erläuterung des Rückgabewerts der Funktion eval() und Beispiele für die Verwendung variabler Umgebungen in JavaScript

Eine kurze Diskussion über die Rolle und den Umfang von eval()

Verwendung eval() in JavaScript Detaillierte Erläuterung der Funktionsberechnung JavaScript-String-Beispiele

Das obige ist der detaillierte Inhalt vonAusführliche Erläuterung der Verwendung von eval in JavaScript. 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