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?
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
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:
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%Tags und Links javascript google-chrome