Size: a a a

2021 February 22

R

Rafael in javascript_ru
Denys Mikhalenko
тут главное понять, что {} в начале строки - это не объект, а пустой блок кода
Точно
источник

R

Rafael in javascript_ru
Получается +[]
источник

R

Rafael in javascript_ru
источник

DM

Denys Mikhalenko in javascript_ru
Вы серьезно? )
источник

DM

Denys Mikhalenko in javascript_ru
Сложение приводит операнды к примитивам с помощью toPrimitive()
источник

DM

Denys Mikhalenko in javascript_ru
у объекта оно возвращает строку [object Object]
источник

DM

Denys Mikhalenko in javascript_ru
у массивов - все элементы через запятую
источник

DM

Denys Mikhalenko in javascript_ru
пустой массив приводится к пустой строке, что логично
источник

DM

Denys Mikhalenko in javascript_ru
{}+[] тождественно +[], т.к. пустой блок выполнился и ничего не делал
источник

DM

Denys Mikhalenko in javascript_ru
[] привелся к примитиву ''
источник

DM

Denys Mikhalenko in javascript_ru
+'' = 0
источник

R

Rafael in javascript_ru
Denys Mikhalenko
Сложение приводит операнды к примитивам с помощью toPrimitive()
Ты про Symbol.toPrimitive? Он не определён для массива
источник

DM

Denys Mikhalenko in javascript_ru
что касается []+{}
[] привелся к пустой строке
источник

DM

Denys Mikhalenko in javascript_ru
'' + {} = '' + [object Object]
источник

DM

Denys Mikhalenko in javascript_ru
получилось [object Object]
источник

DM

Denys Mikhalenko in javascript_ru
вот и вся магия
источник

DM

Denys Mikhalenko in javascript_ru
Rafael
Ты про Symbol.toPrimitive? Он не определён для массива
Там на самом деле все на костылях
источник

DM

Denys Mikhalenko in javascript_ru
Когда ты делаешь +[], оно пробует сначала toPrimitive() которого нет 😁
источник

DM

Denys Mikhalenko in javascript_ru
потом valueOf(), который возвращает сам массив, и поэтому игнорируется 😱
источник

DM

Denys Mikhalenko in javascript_ru
потом toString() и тут уж слава яйцам, получается примитив 👍
источник