仅需 8 个字符即可使用 Javascript 编写任何代码

2025-05-24

仅需 8 个字符即可使用 Javascript 编写任何代码

您可以将任何 Javascript 代码转换为以下字符:

()[]{}!+

并且只有这些字符。

方法如下:

数字

我们可以0通过使用 来转换一个空数组+[]。+ 是一元加法,它将右侧转换为数值,即 0。继续+[]在控制台中输入,您将看到 0。然后,为了得到 1,我们可以使用+!![]!,因为布尔值true可以表示为!![],通过再次使用一元加法,我们将其转换为 1 -+!![]

还和我在一起吗?

通过使用我们的true值并多次求和,我们可以得到其他数字。在 JavaScript 中,true + true = 2,所以 2 可以写成!![]+!![]。这次我们不需要在第一个值!![]前面加上 + ,因为中间的 + 告诉 JavaScript 我们正在添加数值。

我们可以不断地将这些数字相加,得到更大的数字,比如 12,但你能想到更好的方法吗?那就用字符串吧。

在 JavaScript 中可以将字符串转换为数字 - 例如,再次使用一元加法,我们可以像这样得到数字 12:。+("1"+2)我们也可以通过将 1 和 2 与一个空数组连接起来来实现这一点,如下所示:[]+1+2。我们可以在这里利用这一点,而不是对true12 进行求和,我们可以对 1 进行一次求和,对 2 进行两次求和,将它们转换为字符串,将字符串连接在一起,然后将其转换为数字。

呼。

让我们一步一步来:

对 1求和true一次:+!![]

true对 2 进行两次求和:!![]+!![]

将 1 转换为字符串:+!![]+[]

我们不必将 2 转换为字符串,因为 Javascript 已经从我们将 1 转换为字符串中知道我们要添加字符串,而不是数字。

将字符串连接在一起:(+!![]+[])+(+!![]+!![])

将其转换成数字:+((+!![]+[])+(+!![]+!![]))

就是这样。我们可以把数字 12 写成+((+!![]+[])+(+!![]+!![]))

字符串

现在我们有了数字,让我们看看从哪里可以获得其他字符。

  • true:我们已经知道这可以从 !![]
  • false :与真相反, ![]
  • undefined:  将不存在的元素附加到数组: [][[]]
  • NaN:尝试将对象转换为数字: +{}
  • "[object Object]" :javascript 开发人员的最爱,object Object 来自于添加一个数组和一个对象: []+{}

将它们转换为字符串并像数组一样访问它们,我们就能得到单个字符,从中我们甚至可以得到更多的字符串!所以现在,除了我们能想到的任何数字之外,我们还有

abcdefijlnorstu

我们可以用这里的 2 来将字符串转换1e1000为数字,这样就得到了无穷大。甚至更多的字母!

abcdefijlnorstuy

我们不能就此止步。如果我们利用 DOM 元素,我们还可以获得更多字符。

从 DOM 获取字符

如果我们假设我们在浏览器中使用 Javascript,我们也可以假设我们可以访问 DOM 元素,并从那里获取剩余的字符。

我们在这里可以做的是window.unescape通过调用来为我们提供每个 ASCII 字符window.unescape("%" + HEXA_VALUE)

我们已经有了 u、n、e、s、c、a 和 e,只差一个。网站上的p在哪里获取?当然!假设我们在一个通过 HTTP(或 HTTPS)服务的网页上,我们可以将其转换为字符串。这里的第三个字符应该是phttpwindow.locationp.

这里唯一的问题是我们暂时无法访问window。不过 JavaScript 太强大了(哈哈),我们可以像这样获取窗口:

Function("return location")()

然而,虽然我们有f,但没有F。为了得到大写的F,我们可以使用现有的字符来组成 ,array["sort"]["constructor"]这将给我们单词Function

现在我们有了 window 对象,我们可以p从那里获取。现在我们可以使用,window.unescape但我们还没有%获取每个 ASCII 字符所需的 。

幸运的是,转义"[", likeescape("[")会产生字符串%5B,从中我们可以获得百分号。

现在,我们可以像这样获取任何 ASCII 字符!

[][(![]+[])[+[]+!![]+!![]+!![]]+([]+{})[+!![]]+(!![]+[])[+!![]]+(!![]+[])[+[]]][([]+{})[!+[]+!+[]+!+[]+!+[]+!+[]]+([]+{})[+!![]]+([][+[]]+[])[+!![]]+(![]+[])[+[]+!![]+!![]+!![]]+(!![]+[])[+[]]+(!![]+[])[+!![]]+([][+[]]+[])[+[]]+([]+{})[!+[]+!+[]+!+[]+!+[]+!+[]]+(!![]+[])[+[]]+([]+{})[+!![]]+(!![]+[])[+!![]]]((!![]+[])[+!![]]+(!![]+[])[!+[]+!![]+!![]]+(!![]+[])[+[]]+([][+[]]+[])[+[]]+(!![]+[])[+!![]]+([][+[]]+[])[+!![]]+([]+{})[!+[]+!![]+!![]+!![]+!![]+!![]+!![]]+([][+[]]+[])[+[]]+([][+[]]+[])[+!![]]+(!![]+[])[!+[]+!![]+!![]]+(![]+[])[+[]+!![]+!![]+!![]]+([]+{})[!+[]+!+[]+!+[]+!+[]+!+[]]+(+[]+{})[+!![]]+([]+[][(![]+[])[+[]+!![]+!![]+!![]]+([]+{})[+!![]]+(!![]+[])[+!![]]+(!![]+[])[+[]]][([]+{})[!+[]+!+[]+!+[]+!+[]+!+[]]+([]+{})[+!![]]+([][+[]]+[])[+!![]]+(![]+[])[+[]+!![]+!![]+!![]]+(!![]+[])[+[]]+(!![]+[])[+!![]]+([][+[]]+[])[+[]]+([]+{})[!+[]+!+[]+!+[]+!+[]+!+[]]+(!![]+[])[+[]]+([]+{})[+!![]]+(!![]+[])[+!![]]]((!![]+[])[+!![]]+(!![]+[])[!+[]+!![]+!![]]+(!![]+[])[+[]]+([][+[]]+[])[+[]]+(!![]+[])[+!![]]+([][+[]]+[])[+!![]]+([]+{})[!+[]+!![]+!![]+!![]+!![]+!![]+!![]]+(![]+[])[+[]+!![]+!![]]+([]+{})[+!![]]+([]+{})[!+[]+!+[]+!+[]+!+[]+!+[]]+(+[]+{})[+!![]]+(!![]+[])[+[]]+([][+[]]+[])[!+[]+!![]+!![]+!![]+!![]]+([]+{})[+!![]]+([][+[]]+[])[+!![]])())[!+[]+!![]+!![]]+(!![]+[])[!+[]+!![]+!![]])()([][(![]+[])[+[]+!![]+!![]+!![]]+([]+{})[+!![]]+(!![]+[])[+!![]]+(!![]+[])[+[]]][([]+{})[!+[]+!+[]+!+[]+!+[]+!+[]]+([]+{})[+!![]]+([][+[]]+[])[+!![]]+(![]+[])[+[]+!![]+!![]+!![]]+(!![]+[])[+[]]+(!![]+[])[+!![]]+([][+[]]+[])[+[]]+([]+{})[!+[]+!+[]+!+[]+!+[]+!+[]]+(!![]+[])[+[]]+([]+{})[+!![]]+(!![]+[])[+!![]]]((!![]+[])[+!![]]+(!![]+[])[!+[]+!![]+!![]]+(!![]+[])[+[]]+([][+[]]+[])[+[]]+(!![]+[])[+!![]]+([][+[]]+[])[+!![]]+([]+{})[!+[]+!![]+!![]+!![]+!![]+!![]+!![]]+(!![]+[])[!+[]+!![]+!![]]+(![]+[])[+[]+!![]+!![]+!![]]+([]+{})[!+[]+!+[]+!+[]+!+[]+!+[]]+(+[]+{})[+!![]]+([]+[][(![]+[])[+[]+!![]+!![]+!![]]+([]+{})[+!![]]+(!![]+[])[+!![]]+(!![]+[])[+[]]][([]+{})[!+[]+!+[]+!+[]+!+[]+!+[]]+([]+{})[+!![]]+([][+[]]+[])[+!![]]+(![]+[])[+[]+!![]+!![]+!![]]+(!![]+[])[+[]]+(!![]+[])[+!![]]+([][+[]]+[])[+[]]+([]+{})[!+[]+!+[]+!+[]+!+[]+!+[]]+(!![]+[])[+[]]+([]+{})[+!![]]+(!![]+[])[+!![]]]((!![]+[])[+!![]]+(!![]+[])[!+[]+!![]+!![]]+(!![]+[])[+[]]+([][+[]]+[])[+[]]+(!![]+[])[+!![]]+([][+[]]+[])[+!![]]+([]+{})[!+[]+!![]+!![]+!![]+!![]+!![]+!![]]+(![]+[])[+[]+!![]+!![]]+([]+{})[+!![]]+([]+{})[!+[]+!+[]+!+[]+!+[]+!+[]]+(+[]+{})[+!![]]+(!![]+[])[+[]]+([][+[]]+[])[!+[]+!![]+!![]+!![]+!![]]+([]+{})[+!![]]+([][+[]]+[])[+!![]])())[!+[]+!![]+!![]]+(!![]+[])[!+[]+!![]+!![]])()(([]+{})[+[]])[+[]]+HEXA_VALUE)

呼。

然后,要执行这段代码,我们只需要使用 Function。

一些天才发现了一种(复杂得多的)方法,可以将 JavaScript 代码转换成仅 6 个字符,而且无需 DOM。如果你想费点脑筋,可以在这里试试。

就是这样。你只需 8 个字符就能成功编写 JavaScript 代码。如果你之前不觉得 JavaScript 很奇怪,我相信你现在会这么想。

下次面试的时候,如果他们让你解FizzBu​​zz的时候,你应该试试这个方法。看看会发生什么。

文章来源:https://dev.to/catmcgeecode/code-anything-in-javascript-with-only-8-characters-5ghp
PREV
19 个小步骤,让你从零编程经验晋升为 Web 开发人员
NEXT
正则表达式速查表 为所有正则表达式憎恨者(和爱好者)准备的正则表达式速查表 👀 我使用正则表达式的经验 速查表资源