> Как модифицировать класс в JavaScript для кастомного сравнения экземпляра с числом (JavaScript)

Уровень: senior · Роль: frontend · Категория: Технические вопросы

Компании: Инити

Стек: JavaScript

> Пример ответа

Для кастомного сравнения экземпляра класса с числом в JavaScript можно переопределить метод valueOf(). Этот метод вызывается при неявном приведении типа (например, в операторах сравнения <, >, ==). Также можно использовать Symbol.toPrimitive для более гибкого контроля.

Пример с valueOf():

JAVASCRIPT
class Temperature {
constructor(celsius) {
this.celsius = celsius;
}
valueOf() {
return this.celsius;
}
}
const temp = new Temperature(25);
console.log(temp > 20); // true
console.log(temp == 25); // true

Пример с Symbol.toPrimitive (позволяет задать поведение для разных типов):

JAVASCRIPT
class Price {
constructor(amount) {
this.amount = amount;
}
[Symbol.toPrimitive](hint) {
if (hint === 'number') {
return this.amount;
}
if (hint === 'string') {
return `$${this.amount}`;
}
return this.amount; // default
}
}
const price = new Price(100);
console.log(price > 50); // true
console.log(price + 10); // 110
console.log(String(price)); // "$100"

Важно: Для строгого сравнения (===) эти методы не работают - оно всегда сравнивает ссылки. Если нужно кастомное строгое сравнение, используйте отдельный метод (например, equals()).

> ГОТОВЫ К СЛЕДУЮЩЕМУ СОБЕСЕДОВАНИЮ?

Запустите тренировочную сессию с ИИ и получите детальную обратную связь, чтобы увереннее проходить реальные интервью