toString e valueOf
Quando você usa um objeto em um template literal (${objeto}) ou o compara com operadores como >, o JavaScript chama métodos específicos automaticamente: toString para string e valueOf para número. Se você não sobrescrever esses métodos, o comportamento padrão é inútil — por exemplo, ao exibir um produto no console ou ordenar por preço. Dominar essas sobrescritas permite que seus objetos se comportem de forma natural em expressões, evitando conversões manuais chatas.
O PROBLEMA
Crie classe Produto com nome e preco. Implemente toString() e valueOf() para exibição e comparação numérica.
EXEMPLO
const tv = new Produto("TV", 2000);
`${tv}` → "TV: R$2000.00"
tv > 1000 → true (valueOf retorna preco)SOBRE O CONCEITO
toString deve retornar uma string que represente o objeto de forma legível. valueOf deve retornar um valor primitivo (geralmente número) usado em operações aritméticas ou comparações. Um erro comum é confundir os dois: colocar a string de exibição dentro de valueOf ou o valor numérico dentro de toString. Isso quebra a semântica — por exemplo, ${tv} chamaria valueOf em vez de toString, jogando um número onde se espera texto. Outro erro é não sobrescrever; nesse caso, o toString padrão retorna algo como [object Object] e o valueOf retorna o próprio objeto, que nunca é útil. Na sua classe, use toString para formatar "Nome: R$preco" e valueOf para retornar this.preco. Assim, ${tv} chama automaticamente toString, e comparações como tv > 1000 chamam valueOf.
RESOLUÇÃO