Преобразование
важность: 5
Объявлен объект с toString и valueOf.
Какими будут результаты alert?
var foo = {
  toString: function() {
    return 'foo';
  },
  valueOf: function() {
    return 2;
  }
};
alert( foo );
alert( foo + 1 );
alert( foo + "3" );Подумайте, прежде чем ответить.
Первый alert(foo)
Возвращает строковое представление объекта, используя toString, т.е. "foo".
Второй alert(foo + 1)
Оператор '+' преобразует объект к примитиву, используя valueOf, так что результат: 3.
Третий alert(foo + „3“)
То же самое, что и предыдущий случай, объект превращается в примитив 2. Затем происходит сложение 2 + '3'. Оператор '+' при сложении чего-либо со строкой приводит и второй операнд к строке, а затем применяет конкатенацию, так что результат – строка "23".