@Torento20345

Почему [2] + 2 это 22, а не 4?

В книжке написано, что при операции +, если мы складываем объект с чем-то, то объект принимает тип строки или числа в зависимости от того с чем его складывают.
В данном случае мы объект складывает с числом.
Почему он преобразует наш объект в строку, а не число?
  • Вопрос задан
  • 355 просмотров
Решения вопроса 2
lssssssssssl
@lssssssssssl
Массивы не имеют ни Symbol.toPrimitive, ни функционирующего valueOf, они реализуют только преобразование toString, таким образом, здесь [] становится пустой строкой, [1] становится "1", а [1,2] становится "1,2"

https://learn.javascript.ru/array
Ответ написан
Комментировать
Alexandroppolus
@Alexandroppolus
кодир
сначала у массива вызывается метод valueOf, но он возвращает не примитив, а сам массив, и приходится вызвать toString, который дает строку, потому складывается строка с числом.

вот, поэкспериментируй в консоли браузера
var v12 = {
    valueOf: () => {console.log('valueOf'); return [1];},
    toString: () => {console.log('toString'); return '2';}
}

console.log(v12 + 2);

если убрать квадратные скобки, то toString не понадобится
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы