オブジェクトが数値コンテキストで 1 つの値を返し、文字列コンテキストでまったく異なる値を返すようにします。以下は動作しません。
foo = {
toString: function() { return "string" },
valueOf: function() { return 123 }
}
console.log(foo * 2) // got 246, fine
console.log("hi " + foo) // got "hi 123", want "hi string"