Warum Google Chrome-Konsole bei der Eingabe "SyntaxError: Unexpected token}" auslöst (

7

In der Google Chrome-Konsole, wenn wir

eingeben %Vor%

und Enter, Chrome sagt "SyntaxError: Unexpected token}" Warum? Eingabe ist nur "(", einschließlich kein "}".

Wir erhalten denselben Fehler, wenn wir

eingeben %Vor%

Es gibt kein "}" !!!

Das nächste Token sollte eine Argumentenliste oder ")" sein, so dass die Fehlermeldung "Liste erwarteter Argumente" oder "Nicht geschlossen (" oder etwas ") sein sollte.

Und ich möchte wissen, ist die Konsoleneingabe als StatementList(opt) (definiert in ECMA-262) geparst?

    
itchyny 09.04.2011, 04:22
quelle

1 Antwort

21

Bearbeiten: Ich habe den genauen Code gefunden, der ausgewertet wird. Der Code befindet sich in "src / third_party / WebKit / Quelle / WebCore / Inspector / InjectedScriptSource.js".

Bevor die Chrome-Konsole Ihren Code auswertet, wird er in einen with -Block eingefügt, um die Befehlszeilenfunktionen in den Gültigkeitsbereich zu bringen. Also, was Sie eingeben, wird tatsächlich in geschweiften Klammern ausgewertet. Das unerwartete Token "}" wird automatisch von Chrome eingefügt.

Der Code, den Chrome an eval übergibt, ist

%Vor%

Da es sich um eine einfache Textersetzung handelt, funktioniert das folgende Beispiel und das Ergebnis ist ein Objekt, das Sie erweitern können, um die Eigenschaft answer zu sehen:

%Vor%

Was (umformatiert) ist äquivalent zu:

%Vor%

Der } am Anfang schließt den with -Block. Der 0, -Teil ist notwendig, um zu erzwingen, dass das Objektliteral als Ausdruck anstelle eines anderen Blocks geparst wird. Dann ist { answer: 42 der Anfang eines Objektliterals, das durch das eingefügte } -Token geschlossen wird.

Für mehr Spaß, hier sind einige andere Eingaben, die funktionieren (und ihre Ergebnisse):

%Vor%     
Matthew Crumley 09.04.2011 05:22
quelle

Tags und Links