Warum führt}! {in einer JavaScript-Konsole zu False?

8

Wenn Sie }!{ in Ihre JavaScript-Konsole in Chrome einfügen, erhalten Sie false .

Warum bekommen wir keinen Fehler?

    
Eldar Djafarov 16.08.2012, 14:21
quelle

2 Antworten

14

Der Grund für dieses Verhalten liegt darin, dass Chrome alles, was Sie in die Konsole eingeben, mit einem anderen Code umschließt.

Der Code, mit dem es umbrochen wird, ist wie folgt:

%Vor%

Die Eingabe von }!{ schließt die Codeblock-Klammer und erstellt am Ende ein neues (negiertes) Objekt.

Wie Sie selbst in der Konsole sehen können, gibt !{} false zurück.

Ich habe einen ziemlich langen Untersuchungsprozess durchlaufen, um die Antwort darauf zu finden, meine ursprünglichen Kommentare sind unter

erhalten

Ursprüngliche Antwort:

Nur eine Theorie; Ich stelle mir vor, dass der in der Konsole eingegebene Code in einer Funktion

aufgerufen wird

function execUserCode() { code }

Was Sie tun, ist Erstellen

function execUserCode() { }!{ }

Die Konsole gibt das letzte Ergebnis zurück, nämlich !{ } = false

Bearbeiten:

Viele Kommentare darüber, wie das wahrscheinlich falsch ist. Ich stimme zu. Es ist nur eine Theorie.

Ich mag diese Art von Puzzles, also habe ich die Chromium-Quelle durchsucht, es ist ein bisschen viel für mich, aber ich werde einige Hinweise hinterlassen, falls jemand einen Stich hat.

Die JS-Konsole heißt "Inspektor" und kann hier gefunden werden:

chromium/src/third_party/WebKit/Source/WebCore/inspector/

Ich habe mir inspector/front-end/ConsoleView.js angeschaut und ich glaube, ich habe ein wenig herausgefunden, wo der Benutzercode ausgeführt wird.

%Vor%

Der Grund!

Kleine Gehirnwelle. Ich habe das in der Konsole gemacht

%Vor%

Ergebnis:

%Vor%

Ich war nah dran, aber jetzt haben wir die Antwort:)

Der Code wird derzeit in chromium/src/third_party/WebKit/Source/WebCore/inspector/InjectedScriptSource.js in der Umgebung von Zeile 440 generiert.

    
Leigh 16.08.2012, 14:26
quelle
3

Nur eine Vermutung. Wenn das Skript in {} eingeschlossen ist und mit eval ausgeführt wird, geschieht dies.

Benutzerskript: "}!{"

eingeschlossen in {} : "{}!{}"

dann eval("{}!{}") gibt false

Ich denke, das passiert in der Browser-Konsole.

    
Diode 16.08.2012 14:42
quelle

Tags und Links