В Javascript каждый объект имеет метод valueOf() и toString(). Я бы подумал, что метод toString() вызывается всякий раз, когда вызывается преобразование строки, но, по-видимому, оно сфабриковано значениемOf().
Например, код
var x = {toString: function() {return "foo"; },
valueOf: function() {return 42; }};
window.console.log ("x="+x);
window.console.log ("x="+x.toString());
напечатает
x=42
x=foo
Это поражает меня как назад. Если x было сложным числом, например, я бы хотел, чтобы valueOf() дал мне свою величину, но всякий раз, когда я хотел преобразовать в строку, я хотел бы получить что-то вроде "a + bi". И я бы не хотел, чтобы я вызывал toString() явно в контекстах, которые подразумевали строку.
Это так, как есть?