На данный вопрос уже ответили:
Проводя некоторые тесты наткнулся на интересное поведение, которое не могу себе объяснить.
Код:
var a = {
toString: function(){return "It's a string"},
valueOf: function(){return 100}
};
console.log(a); /// Выводит объект (1)
console.log(+a); /// Выводит 100 в числовом типе (2)
console.log(""+a); /// Выводит "100" в строковом типе (3)
console.log(String(a)); /// Выводит "It's a string" (4)
А теперь по порядку:
Вопросы:
Что не так с пунктом 3? Какие ньюансы возникают, что интерпретатор так работает?
P.S Если я где-то не прав, поправьте.
Вопрос о конкатенации решается уже после преобразования обоих операндов в примитивы. Т.е. сначала происходит численное преобразование объекта (т.к. + это математический оператор), а уже потом строковое (т.к. второй операнд строка).
Сборка персонального компьютера от Artline: умный выбор для современных пользователей