Quais são as strings internas do JavaScript?

esta questão é difícil resumir em um título de pergunta

ATUALIZAR Eu criei um JSFiddle que constrói uma string ofuscada a partir de sua entrada com base nas letras extraídas desta questão: Você pode acessá-laAquiou seriaessência ser mais fácil?

Recentemente me deparei com um pouco de JavaScript ofuscado emeste perfil que se parece com isso:

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]

Desculpe arruinar a surpresa, mas quando isso é avaliado, isso retorna:

"I love you" in Chrome
"I lone you" In Firefox
"I lo[e you" in IE10

A maneira como isso funciona quando é dividida, é gerar uma série de mensagens e extrair letras delas assim (usando o "eu" como exemplo):

[]+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"

Outras cadeias que são geradas incluem:

({}+[])       -> "[object Object]" (where the space comes from)
([]+!!-[])    -> "false" (used for it's "l")
[/~/+{}][+!1] -> "/~/[object Object]" (this is used for an "o")
(/<</[1]+[])  -> "undefined"

Eu estava interessado em encontrar um substituto para o "n" e "[" e veio com isso:

String.fromCharCode(('1'.charCodeAt(0)<<1)+(10<<1))

O que eu sinto no espírito de usar 1's e 0's, mas viola um dos aspectos mais elegantes do código original, que é a aparência de não ter nada a ver com strings. Alguém mais tem uma idéia de como gerar um "v" que esteja de acordo com o código original ofuscado?

Aqui estão algumas informações extras que foram encontradas depois que muitos programadores JavaScript talentosos analisaram

O Firefox retorna "Eu te perdi" Por causa dessa linha:

([]+/-/[(!!1+[])[1>>1]+(!!1+[])[1<<1^1]+(!1+[])[1|1<<1]+(!!1+[])[1^1]])[1^11<<1]+

[1^11<<1] apara um caractere específico disso:

([]+/-/[(!!1+[])[1>>1]+(!!1+[])[1<<1^1]+(!1+[])[1|1<<1]+(!!1+[])[1^1]])

Qual avalia a isto:

"function test() {
    [native code]
}"

Que parece que podemos ter o nosso "V" !!!

O Chrome retorna "Eu te amo", porque o mesmo código retorna isso:

"function test() { [native code] }"

Antes de fechar a questão para uma conexão questionável com "um problema de programação real", pensei em adicionar uma solução resumida que se baseia em@ Supr, @ Cory e@ alpha123's, contemplar:

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])

Dada a complexidade do código e a mensagem que produz, é quase como se o mecanismo de JavaScript estivesse dizendo o quão especial você se sente :)

questionAnswers(7)

yourAnswerToTheQuestion