@okonoshi

Преобразование объекта в примитив, почему прилетает object Object?

Я разобрался вроде как с темой преобразования объектов в примитивы, но один вопрос все таки возник.
Вот код:

let test = {
  key: 'aaa',
  3: 3,
  valueOf() {
    return this[3];
  },
};
console.log(String(test));

Явное преобразование при помощи String, значит прилетает хинт 'string', ищет метод toPrimitive - нет. дальше ищет метод toString - его нет. Ищет метод valueOf - он есть и он явно возвращает примитив, а не объект.
Но консоль мне выдает [object Object], почему так?

Ведь судя по книге, должен сработать valueOf
spoiler

Если нет Symbol.toPrimitive, тогда JavaScript пытается найти методы toString и valueOf:
Для хинта "string": вызвать метод toString, а если он не существует, то valueOf (таким образом, toString имеет приоритет при строковом преобразовании).
Для других хинтов: valueOf, а если он не существует, то toString (таким образом, valueOf имеет приоритет для математических операций).
  • Вопрос задан
  • 398 просмотров
Решения вопроса 1
0xD34F
@0xD34F Куратор тега JavaScript
ищет метод toString - его нет

То есть, если попробовать получить test.toString, то результатом будет undefined. Вы проверьте, так ли это. Будете удивлены.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

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