JavaScript и приведение типов, продолжение
Пятница, 5 октября 2012

Помните, пару дней назад я задавался вопросом приведения типов? Я тогда не нашел объяснения, почему {}+[] дает 0, a {}+{} дает NaN. Теперь я могу это объяснить.

Оказывается, левый операнд воспринимается не как пустой объект, а как пустой блок кода. И именно это главная составляющая, которой мне не хватило для объяснения. Получается, что выражение делится на два: {};+[]. Дальше [] приводится к примитивному типу и становится равным пустой строке. А так как унарный плюс требует числовой операнд, то пустая строка переводится в число и получается 0.

Такая же история с {}+{}. Это выражение тоже делится на два: {};+{}. При переводе {} к примитивному типу мы получаем строку ”[object Object]”, которая при приведении к числу и дает NaN. Так что никакой мистики.

Вот такая магия. Правильный ответ был найден на Stack Overflow.

P.S. Пример в прошлой статье я поправил на более верный.

← Самый быстрый JavaScript-фреймворкwebplatform.org →

Хочется что-то добавить или сказать? Я всегда рад обсудить. Пишите на me@dikmax.name.