этот вопрос трудно подытожить в заголовке вопроса
UPDATE Я создал JSFiddle, который строит запутанную строку из вашего ввода на основе букв, извлеченных из этого вопроса: вы можете получить к нему доступ здесь или gist быть проще?
Недавно я встретил забавный бит запутанного 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 "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 и @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 рассказывает, насколько вы его чувствуете:)