@Fenz

Неявное преобразование объектов почему работает по-разному?

В неявном преобразовании объектов приводятся к примитиву обе стороны, а потом происходит вычисление операции.
Если {} + {} // NaN , то есть обе стороны преобразуются к числу.
А в этом случае [] + {} // "[object Object]" , то есть правая часть преобразуется в строку, хотя по логике должно к числу, и выводить строку "NaN".
Почему так происходит?
  • Вопрос задан
  • 140 просмотров
Решения вопроса 1
@FeelsGoodMan
Для массива и объекта срабатывает метод valueOf(), но для массива он не реализован и вызывается toString(), что вернет список элементов в виде строки, он пуст, а значит пустая строка "". Для объекта метод вернет [object Object]. Происходит конкатенация ""+[object Object].
В случае {}+{}. Первый объект является просто блоком, а не объектом, потому что скобки вне выражения. Поэтому остаётся +{}. Тут опять valueOf() вернет [object Object], но унарный плюс не сделает его числом и вернет NaN
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы