为什么这个“ Hello,World!”JavaScript 代码片段被认为是可接受的程序指令?

最近一位同事展示了这段 JavaScript 代码:

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

如果你把它粘贴到开发者控制台并执行,它会打印一条“ Hello,World!”消息:

>> console.log(greet())
hello, world!

我发现的另一个有趣的事情是,如果你在 Node.js REPL 中粘贴相同的 greet代码,它会自动转换为“可读”的格式。

这是如何工作的? 为什么这种行为在浏览器中是可能的? 为什么 Node.js 会自动格式化它?

11539 次浏览

你有隐藏的字符反转文本。在这里你可以看到原始字符: https://www.soscisurvey.de/tools/view-chars.php

enter image description here

实际代码是:

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

其中字符串文字中的 ...是字节 E2 80 AE,它是从右到左的覆盖 Unicode字符,这会导致它之后的所有内容都反向显示。它用于从右向左书写像阿拉伯语或希伯来语这样的语言。

hex editors are your friend