[[][[]]+[]][+[]][++[+[]][+[]]] — это «n» в JavaScript
Недавно на Reddit появился пост с объяснением, почему конструкция [[][[]]+[]][+[]][++[+[]][+[]]] в языке JavaScript вычисляется как символ «n».
17К открытий17К показов
Недавно на Reddit появился пост с объяснением, почему конструкция [[][[]]+[]][+[]][++[+[]][+[]]]
в языке JavaScript вычисляется как символ «n». Переводим его для вас.
Итак, начнём с пустого массива:
[]
Теперь получим доступ к элементу пустого массива:
[][]
Какому элементу? Пусть это будет элемент с индексом пустого массива:
[][[]]
Это значение не определено, т.е. равно undefined
, но если добавить к нему пустой массив, то получится строка «undefined»:
[][[]]+[]
Обернём её массивом:
[[][[]]+[]]
Теперь попробуем получить доступ к буквам этой строки. Для начала нам нужно получить доступ к самой строке внутри массива:
[[][[]]+[]][0]
А ведь ноль можно получить, если преобразовать пустой массив к числу:
[[][[]]+[]][+[]]
Буква «n» вторая в слове «undefined», значит, индекс у неё 1:
[[][[]]+[]][+[]][1]
Но как нам получить 1? Конечно же, увеличить на единицу 0, который мы уже научились получать ранее:
++[0][0]
И, как и раньше, нули тоже можно записать через скобки:
++[+[]][+[]]
Итак, собираем всё вместе и получаем:
[[][[]]+[]][+[]][++[+[]][+[]]]
Больше почитать про похожие трюки можно в нашей статье про магию JavaScript — в ней рассказывается, что интересного можно сделать, используя всего 6 символов.
17К открытий17К показов