це питання важко підсумувати у назві запитання
ОНОВЛЕННЯ Я створив 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
Як це працює при розбитті, - це генерувати ряд повідомлень і витягувати з них букви так (використовуючи "Я" як приклад):
[]+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's , @ 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] }
, тоді ви могли б його нормалізувати та витягти потрібний лист