Вопрос проверяет знание механизмов управления приведением типов и умение объяснить нестандартное поведение объектов.
Да, приведение типов у объекта можно переопределить. Для этого используют Symbol.toPrimitive, а также методы valueOf и toString. При наличии Symbol.toPrimitive именно он имеет наивысший приоритет. Это позволяет точно контролировать, как объект ведёт себя в разных контекстах.
JavaScript предоставляет несколько уровней контроля над приведением типов.
Определение: Symbol.toPrimitive — специальный метод, который определяет, как объект преобразуется в примитив.
JavaScript использует следующий порядок:
obj[Symbol.toPrimitive]
valueOf()
toString()
const user = {
name: 'Alex',
age: 30,
[Symbol.toPrimitive](hint) {
if (hint === 'number') return this.age;
if (hint === 'string') return this.name;
return `${this.name} (${this.age})`;
}
};
Number(user); // 30
String(user); // 'Alex'
user + ''; // 'Alex (30)'
логирование и отладка
value-объекты (деньги, размеры, единицы измерения)
удобное API для библиотек
ухудшает читаемость
может вводить в заблуждение
редко ожидаемо для других разработчиков
Вывод: да, приведение типов можно переопределить, и самый приоритетный способ — Symbol.toPrimitive, но применять его стоит осознанно.