[[][[]]+[]][+[]][++[+[]][+[]]] — это «n» в JavaScript

Аватар Типичный программист
Отредактировано

Недавно на Reddit появился пост с объяснением, почему конструкция [[][[]]+[]][+[]][++[+[]][+[]]] в языке JavaScript вычисляется как символ «n».

17К открытий17К показов
[[][[]]+[]][+[]][++[+[]][+[]]] — это «n» в JavaScript

Недавно на Reddit появился пост с объяснением, почему конструкция [[][[]]+[]][+[]][++[+[]][+[]]] в языке JavaScript вычисляется как символ «n». Переводим его для вас.

Итак, начнём с пустого массива:

[]

Теперь получим доступ к элементу пустого массива:

[][]

Какому элементу? Пусть это будет элемент с индексом пустого массива:

[][[]]

Это значение не определено, т.е. равно undefined, но если добавить к нему пустой массив, то получится строка «undefined»:

[][[]]+[]

Обернём её массивом:

[[][[]]+[]]

Теперь попробуем получить доступ к буквам этой строки. Для начала нам нужно получить доступ к самой строке внутри массива:

[[][[]]+[]][0]

А ведь ноль можно получить, если преобразовать пустой массив к числу:

[[][[]]+[]][+[]]

Буква «n» вторая в слове «undefined», значит, индекс у неё 1:

[[][[]]+[]][+[]][1]

Но как нам получить 1? Конечно же, увеличить на единицу 0, который мы уже научились получать ранее:

++[0][0]

И, как и раньше, нули тоже можно записать через скобки:

++[+[]][+[]]

Итак, собираем всё вместе и получаем:

[[][[]]+[]][+[]][++[+[]][+[]]]

Больше почитать про похожие трюки можно в нашей статье про магию JavaScript — в ней рассказывается, что интересного можно сделать, используя всего 6 символов.

Следите за новыми постами
Следите за новыми постами по любимым темам
17К открытий17К показов