этот вопрос сложно обобщить в названии вопроса
ОБНОВЛЕНИЕ Я создал 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 возвращает «я одинок» из-за этой строки:
([]+/-/[(!!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 возвращает «Я люблю тебя», потому что тот же код возвращает это:
"function test() { [native code] }"
До того, как вопрос был закрыт для сомнительной связи с «реальной проблемой программирования», я подумал, что хотел бы добавить обобщенное решение, основанное на @ Supr , @ Cory's и @ alpha123 , вот:
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 говорит о том, насколько особенным вы его чувствуете :)
function test() { [native code] }
, которые у вас есть, то вы можете нормализовать их и извлечь