Для того, чтобы разобраться как все работает, достаточно расставить скобочки и вычислить все выражения по порядку:
+(++([[]][(+[])])+[(+[])])
Отформатируем
+ ( // 5
++ ( // 3
[[]][ // 2
+[] // 1
]
)
+ [ // 4
+[] // 1
]
)
Рассмотрим по шагам:
+[]
- унарный +
переводит операнд в число. Пустой массив приводится к пустой строке, после этого пустая строка переводится в число 0
.
+ ( // 5
++ ( // 3
[[]][ // 2
0
]
)
+ [ // 4
0
]
)
[[]][0]
- получение элемента массива по индексу. В данном случае вернется []
- нулевой элемент из [[]]
+ ( // 5
++ ( // 3
[]
)
+ [ // 4
0
]
)
++ ([])
- данный шаг выполняется вместе со вторым, []
одновременно приводится к 0
и увеличивается на 1
.
+ ( // 5
1
+ [ // 4
0
]
)
1 + [0]
- складываются разнородные операнды, второй приводится к '0'
что равносильно складыванию числа и строки 1 + '0'
, результат '10'
+ ( // 5
'10'
)
+'10'
- применение унарного плюса к строке, приводит ее к числу. Результат - 10