Здравствуйте.Изучаю Js и остановился на одном моменте не могу понять об численном преобразовании объектов. В главе пишет, что численное преобразование делается через метод valueOf, а если его нет – то toString. Тогда почему в примере ниже числа складываются как строки в a + b?
var a = {
valueOf: function() {
return "1";
}
};
var b = {
valueOf: function() {
return "2";
}
};
alert( a + b ); // "12"
alert( a - b ); // "1" - "2" = -1
почему в примере ниже числа складываются как строки
Очевидно потому, что методы valueOf в обоих случаях возвращают строки, а если хотя бы один из операндов оператора + строка, то и второй операнд так же будет приведен к строке.
Заменив возвращаемое значение на число, результат станет ожидаемым.
var a = {
valueOf: function() {
return 1;
}
};
var b = {
valueOf: function() {
return 2;
}
};
console.log(a + b);
Если копнуть чуть глубже, можно найти в спецификации алгоритм для оператора +
В котором можно отметить шаги 5,6,7, в которых объекты приводятся к примитивам, и если хотя бы один из объектов был приведен к строке, то дальше происходит сложение строк.
Подробнее про ToPrimitive можно посмотреть в ответе на вопрос В чем разница между valueOf и toString
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
ЗдравствуйтеНа сайте есть два поля и две кнопки