Задать вопрос

Как посчитать странное выражение (из теста с UpWork)?

Здравствуйте! Сдал тест на 2.5. Есть неадекватные тесты или я чего-то не понимаю.
Как вот это считать?
++[[]][+[]]+[+[]]
Это выводит 10...
Почти год работаю с JS но этого еще не видел
  • Вопрос задан
  • 2417 просмотров
Подписаться 9 Оценить Комментировать
Пригласить эксперта
Ответы на вопрос 3
lazalu68
@lazalu68
Salmon
UPD: разбор именно вашего случая

TLDR - комментированный jjencode

Описание порядка действий, type conversion table

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

Два слагаемых: ++[[]][+[]] и [+[]]

Первое слагаемое равно единице, т.к. первая пара квадратных скобок это литерал массива с единственным элементом - пустым массивом, вторая пара - обращение к этому массиву по индексу +[], то есть 0. По индексу 0 лежит пустой массив, в виду инкремента он приводится к числу (получается 0) и добавляется единица, получается 1

Второе слагаемое это литерал массива с единственным элементом 0.

То есть складываются единица и [0], 1+[0].

Единственная загадка это почему в этой операции [0] приводится к строке. Было бы логично если бы в операции сложения единицы и массива массив приводился к примитиву с PreferredType равным "number", но почему-то получается строка. Большое спасибо было бы тому человеку, который бы объяснил этот момент в спецификации.
Ответ написан
space2pacman
@space2pacman
Просто царь.
https://habrahabr.ru/post/279507/
www.jsfuck.com
Проще говоря тут просто строка со значением 10.
++[[]][+[]]+[+[]]
Ответ написан
beerb0x
@beerb0x
Front, Junior
вот еще код посложнее: pastebin.com/F7QYajdu
вот разбор к нему: https://habrahabr.ru/post/312172/
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы