Warum wird dieses "Hello, World!" JavaScript-Codefragment als akzeptable Programmanweisung erkannt?

Kürzlich zeigte ein Kollege dieses Fragment von JavaScript-Code:

greet = "".toString.bind("hallo Welt!")

Wenn Sie dies in die Entwicklerkonsole einfügen und ausführen, wird eine "Hallo, Welt!" Nachricht ausgegeben:

"" console.log(grüßen())
hallo Welt!

Eine weitere interessante Sache, die ich herausgefunden habe, ist, dass, wenn man den gleichen "greet"-Code in Node.js REPL einfügt, er automatisch in ein lesbares Format transpiliert wird.

Wie funktioniert das? Warum ist dieses Verhalten in einem Browser möglich und warum formatiert Node.js es automatisch?

Kommentare zu der Frage (8)
Lösung

Der eigentliche Code lautet:

greet = "...".toString.bind("hello world!")

Wobei die ... im Stringliteral die Bytes E2 80 AE sind, was das Rechts-nach-Links-Überschreibungs-Unicode-Zeichen ist, das bewirkt, dass alles danach in umgekehrter Reihenfolge angezeigt wird. Es wird verwendet, um Sprachen wie Arabisch oder Hebräisch von rechts nach links zu schreiben.

Hex-Editoren sind dein Freund]1

Kommentare (7)

Sie haben versteckte Zeichen, die den Text umkehren. Hier sehen Sie die Rohzeichen: https://www.soscisurvey.de/tools/view-chars.php

Kommentare (4)