Помните, пару дней назад я задавался вопросом приведения типов? Я тогда не нашел объяснения, почему {}+[]
дает 0, a {}+{}
дает NaN
. Теперь я могу это объяснить.
Оказывается, левый операнд воспринимается не как пустой объект, а как пустой блок кода. И именно это главная составляющая, которой мне не хватило для объяснения. Получается, что выражение делится на два: {};+[]
. Дальше []
приводится к примитивному типу и становится равным пустой строке. А так как унарный плюс требует числовой операнд, то пустая строка переводится в число и получается 0.
Такая же история с {}+{}
. Это выражение тоже делится на два: {};+{}
. При переводе {}
к примитивному типу мы получаем строку ”[object Object]”
, которая при приведении к числу и дает NaN
. Так что никакой мистики.
Вот такая магия. Правильный ответ был найден на Stack Overflow.
P.S. Пример в прошлой статье я поправил на более верный.
Хочется что-то добавить или сказать? Я всегда рад обсудить. Пишите на me@dikmax.name.