Why is this "Hello, World!" JavaScript code fragment recognized as an acceptable program instruction?
Javascriptnode.jsJavascript Problem Overview
Recently a coworker showed this fragment of JavaScript code:
greet = "".toString.bind("hello world!")
If you paste this inside the Developer Console and execute it will print a "Hello, World!" message:
>> console.log(greet())
hello, world!
Another interesting thing I found is that if you paste the same greet
code inside Node.js REPL it will automatically transpile it to a "readable" format.
How does this work? Why is this behaviour possible in a browser and why does Node.js automatically format it?
Javascript Solutions
Solution 1 - Javascript
The actual code is:
greet = "...".toString.bind("hello world!")
Where the ...
in the string literal are the bytes E2 80 AE
, which is the right-to-left override Unicode character, which causes everything after it to be displayed in reverse. It's used for writing right-to-left languages like Arabic or Hebrew.
Solution 2 - Javascript
You have hidden characters which reverse the text. Here you can see the raw characters: https://www.soscisurvey.de/tools/view-chars.php