这个问题很难用题目来概括
更新 我创建了一个 JSFiddle,它根据从这个问题中提取的字母从您的输入中构建一个模糊的字符串: 您可以访问它 给你,还是 大意更容易?
我最近在 这个侧写中遇到了一个有趣的混淆 JavaScript,它看起来像这样:
javascript:[[]+1/!1][1^1][1>>1]+({}+[])[1<<1^11>>1]+([]+!!-
[])[1<<1]+[/~/+{}][+!1][-~1<<1]+([]+/-/[(!!1+[])[1>>1]+(!!1
+[])[1<<1^1]+(!1+[])[1|1<<1]+(!!1+[])[1^1]])[1^11<<1]+([,][
~1]+[])[1-~1]+[[]+{}][!1.1%1][11111.1%11.1*111e11|!1]+(/1/+
1/[1<1][1%1])[1^11]+[[],[]+{}][1][+1]+(/<</[1]+[])[1/1.1&1]
抱歉打断你的惊喜,但是当它被计算时,它返回这个:
"I love you" in Chrome
"I lone you" In Firefox
"I lo[e you" in IE10
这种方法的工作原理是,生成一系列的消息,然后像这样从中提取字母(使用“ I”作为例子) :
[]+1/!1
returns
"Infinity"
then
[[]+1/!1]
creates this array:
["Infinity"]
then
[[]+1/!1][1^1]
Takes the first (1^1 == 0) element of that array
"Infinity"
finally
[[]+1/!1][1^1][1>>1]
Takes the first (1>>1 == 0) char of that string
"I"
生成的其他字符串包括:
({}+[]) -> "[object Object]" (where the space comes from)
([]+!!-[]) -> "false" (used for it's "l")
[/~/+{}][+!1] -> "/~/[object Object]" (this is used for an "o")
(/<</[1]+[]) -> "undefined"
我想找一个替代“ n”和“[”的词,于是想到了这个:
String.fromCharCode(('1'.charCodeAt(0)<<1)+(10<<1))
我觉得这是在使用1和0的精神,但违反了原始代码的一个更优雅的方面,那就是与字符串没有任何关系的外观。还有人知道如何生成一个符合原始模糊代码的“ v”吗?
在许多有才华的 JavaScript 程序员对此进行了更深入的研究之后,我们发现了一些额外的信息
Firefox 返回“ I alone you”,原因如下:
([]+/-/[(!!1+[])[1>>1]+(!!1+[])[1<<1^1]+(!1+[])[1|1<<1]+(!!1+[])[1^1]])[1^11<<1]+
[1^11<<1]
从这里修剪一个特定的字符:
([]+/-/[(!!1+[])[1>>1]+(!!1+[])[1<<1^1]+(!1+[])[1|1<<1]+(!!1+[])[1^1]])
计算结果如下:
"function test() {
[native code]
}"
看起来我们可能有“ V”了! ! !
Chrome 返回“ I love you”,因为相同的代码返回:
"function test() { [native code] }"
在这个问题因为与“一个真正的编程问题”的可疑连接而结束之前,我想我应该添加一个基于 @ 超级快餐、 @ Cory 的和 @ alpha123’s的总结解决方案,请看:
alert([[]+1/!1][1^1][1>>1]+({}+[])[1<<1^11>>1]+(
[]+!!-[])[1<<1]+[/~/+{}][+!1][-~1<<1]+[([]+/-/[(
!!1+[])[1>>1]+(!!1+[])[1<<1^1]+(!1+[])[1|1<<1]+(
!!1+[])[1^1]])[1+(1^(11+1+1)<<1)],([]+/-/[(!!1+[
])[1>>1]+(!!1+[])[1<<1^1]+(!1+[])[1|1<<1]+(!!1+[
])[1^1]])[1^11<<1],([]+/-/[(!!1+[])[1>>1]+(!!1+[
])[1<<1^1]+(!1+[])[1|1<<1]+(!!1+[])[1^1]])[1^(11
+1+1)<<1]][((([]+/-/[(!!1+[])[1>>1]+(!!1+[])[1<<
1^1]+(!1+[])[1|1<<1]+(!!1+[])[1^1]])[(1<<1<<1<<1
)+1<<1]==({}+[])[1^1])*1)+((([]+/-/[(!!1+[])[1>>
1]+(!!1+[])[1<<1^1]+(!1+[])[1|1<<1]+(!!1+[])[1^1
]])[(1^11<<1)-1]==({}+[])[1^1])<<1)]+([,][~1]+[]
)[1-~1]+[[]+{}][!1.1%1][11111.1%11.1*111e11|!1]+
(/1/+1/[1<1][1%1])[1^11]+[[],[]+{}][1][+1]+(/<</
[1]+[])[1/1.1&1])
考虑到代码的复杂性和它所产生的消息,这就好像 JavaScript 引擎在告诉你它是多么的特别:)