cette question est difficile à résumer dans un titre de question
MISE À JOUR J'ai créé un JSFiddle qui construit une chaîne masquée à partir de votre entrée en fonction des lettres extraites de cette question: vous pouvez y accéder ici , ou est-ce que l' essentiel serait plus facile?
Je suis récemment tombé sur un peu amusant de JavaScript obscurci dans ce profil qui ressemble à ceci:
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]
Désolé de gâcher la surprise, mais lorsque cela est évalué, il renvoie ceci:
"I love you" in Chrome
"I lone you" In Firefox
"I lo[e you" in IE10
La façon dont cela fonctionne une fois éclaté, est de générer une série de messages et d'en extraire des lettres comme ceci (en utilisant le "I" comme exemple):
[]+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"
Les autres chaînes générées incluent:
({}+[]) -> "[object Object]" (where the space comes from)
([]+!!-[]) -> "false" (used for it's "l")
[/~/+{}][+!1] -> "/~/[object Object]" (this is used for an "o")
(/<</[1]+[]) -> "undefined"
J'étais intéressé à trouver un remplaçant pour le "n" et "[" et j'ai trouvé ceci:
String.fromCharCode(('1'.charCodeAt(0)<<1)+(10<<1))
Ce que je ressens dans l'esprit d'utiliser des 1 et des 0, mais qui viole l'un des aspects les plus élégants du code original qui est l'apparence de n'avoir rien à voir avec les chaînes du tout. Quelqu'un d'autre a-t-il une idée de la façon de générer un "v" conforme au code obscurci d'origine?
Voici quelques informations supplémentaires qui ont été trouvées après que de nombreux programmeurs JavaScript talentueux se soient penchés plus en profondeur sur cette
Firefox renvoie "Je t'ai seul" à cause de cette ligne:
([]+/-/[(!!1+[])[1>>1]+(!!1+[])[1<<1^1]+(!1+[])[1|1<<1]+(!!1+[])[1^1]])[1^11<<1]+
[1^11<<1]
supprime un caractère spécifique de ceci:
([]+/-/[(!!1+[])[1>>1]+(!!1+[])[1<<1^1]+(!1+[])[1|1<<1]+(!!1+[])[1^1]])
Qui évalue à ceci:
"function test() {
[native code]
}"
On dirait que nous pourrions avoir notre "V" !!!
Chrome renvoie "Je t'aime", car le même code renvoie ceci:
"function test() { [native code] }"
Avant que la question ne soit close pour un lien douteux avec "un vrai problème de programmation", j'ai pensé ajouter une solution résumée qui s'appuie sur celles de @ Supr , @ Cory et @ alpha123 , voici:
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])
Compte tenu de la complexité du code et du message qu'il produit, c'est presque comme si le moteur JavaScript disait à quel point vous le faites sentir :)
function test() { [native code] }
, alors vous pouvez la normaliser et extraire la lettre que vous voulez