仅需 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
。我们可以在这里利用这一点,而不是对true
12 进行求和,我们可以对 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)服务的网页上,我们可以将其转换为字符串。这里的第三个字符应该是p
http
window.location
p.
这里唯一的问题是我们暂时无法访问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 很奇怪,我相信你现在会这么想。
下次面试的时候,如果他们让你解FizzBuzz的时候,你应该试试这个方法。看看会发生什么。
文章来源:https://dev.to/catmcgeecode/code-anything-in-javascript-with-only-8-characters-5ghp