UPD:
разбор именно вашего случая
TLDR -
комментированный jjencode
Описание
порядка действий,
type conversion table++[[]][+[]]+[+[]]
Два слагаемых:
++[[]][+[]]
и
[+[]]
Первое слагаемое равно единице, т.к. первая пара квадратных скобок это литерал массива с единственным элементом - пустым массивом, вторая пара - обращение к этому массиву по индексу
+[]
, то есть 0. По индексу 0 лежит пустой массив, в виду инкремента он приводится к числу (получается 0) и добавляется единица, получается 1
Второе слагаемое это литерал массива с единственным элементом 0.
То есть складываются единица и [0],
1+[0]
.
Единственная загадка это почему в этой операции [0] приводится к строке. Было бы логично если бы в операции сложения единицы и массива массив приводился к примитиву с
PreferredType равным "number", но почему-то получается строка. Большое спасибо было бы тому человеку, который бы объяснил этот момент в
спецификации.