Как в этом случае работает преобразование объекта в строку? И, что более важно... Что здесь делает "дефолтный" метод
toString
(под "дефолтным" я подразумеваю метод, который не был переопределен вручную в самом объекте)?
let a = {
valueOf: function () {
return {};
},
toString: function() {
//conversion to string
}
};
console.log(String(a)); //[object Object]
Насколько я понимаю, объект конвертируется в строку прямо в самом в методе
toString
. Т.к. он не может вернуть объект и только в
String(a)
преобразовать этот объект в строковый тип. Потому что тогда метод
toString
будет возвращать объект, что уже не очень хорошо т.к.
метод возвращающий непримитивный тип данных, будет проигнорирован.
Что же касается метода
valueOf
, я думаю, что во всех тех случаях, когда его поведение не было переопределено, будет возвращаться сам объект. И этот метод, как следствие, почти всегда будет проигнорирован. Проще говоря, я хочу сказать, что "дефолтный" метод
valueOf
всегда возвращает объекты.
- Так что мой первый вопрос: Происходит ли преобразование в строковый тип прямо в методе
toString
? Если да, всегда ли метод toString
преобразует объекты в строковый тип?
- И второй вопрос: Всегда ли "дефолтный" метод
valueOf
возвращает объекты?