Преобразование
важность: 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"
.