Недавно коллега по работе показал этот фрагмент кода JavaScript:
``js greet = "".toString.bind("hello world!")
Если вставить это в консоль разработчика и выполнить, то будет выведено сообщение "Hello, World!":
``js
>> console.log(greet())
hello world!
Еще одна интересная вещь, которую я обнаружил: если вы вставите тот же самый код greet
в Node.js REPL, он автоматически транспонирует его в "читабельный" формат.
Как это работает? Почему такое поведение возможно в браузере и почему Node.js автоматически форматирует его?
Фактический код таков:
greet = "...".toString.bind("hello world!")
Где ...
в строковом литерале - это байт E2 80 AE
, который является символом Unicode, переопределяющим право-лево, что приводит к тому, что все после него отображается в обратном порядке. Он используется для написания языков с правым расположением букв, таких как арабский или иврит.
У вас есть скрытые символы, которые изменяют текст. Здесь вы можете увидеть необработанные символы: https://www.soscisurvey.de/tools/view-chars.php