Użyjmy konsolę dostać naszą odpowiedź zakładając, że nie wiemy, co to znaczy, wpisując
[] + ""
w wyjściach konsoli ""
tylko wprowadzenie (!!+[])
powraca Boolean false
. Jeśli dołączysz wartość Boolean false
do ""
, otrzymasz String false
ze względu na typ przymusu.
Zgodnie z oczekiwaniami, wpisanie powoduje wysłanie "false"
do konsoli.
Idąc dalej, w JavaScript, możesz myśleć o ciągach takich jak tablica znaków i możesz uzyskać dostęp do ich postaci za pomocą notacji tablicowej.
Tak więc w ((!!+[]+"")[+!![]])
można usunąć najbardziej zewnętrzne klamry, aby wyglądało na prostsze. Teraz mamy (!!+[]+"")[+!![]]
, w której pierwsza część w ()
zwraca Ciąg "false"
, a następna część w []
uzyskuje dostęp do znaku Ciągu "false"
. Możesz teraz postawić zakład, że +!![]
w jakiś sposób zwraca 1, ponieważ "false"[1]
jest równy "a"
.
Teraz dowiedzieć się, jak +!![]
równa 1
:
[]
jest pustą tablicą, które można myśleć jako 0
co byłoby true
w JavaScript (bo „w niczym JavaScript«prawdziwy»jest true
”) , więc! [] jest false
i !![]
jest true
.
Teraz pozostaje nam +true
, który jest skrótem do konwersji true
na numer, który byłby 1
.Teraz możesz zobaczyć, jak +!![]
ocenia się na 1
i rozumiesz (miejmy nadzieję), jak działa ten zaciemniony fragment kodu!
To wszystko można uprościć do '("false"[1])'. Teraz wiesz, dlaczego wynik jest "a". – abhishekkannojia
a jest drugą literą fałszu. Clever ^^ – WayToDoor
[patrz tutaj] (https://github.com/aemkei/jsfuck/blob/master/jsfuck.js) –