Здравствуйте.Изучаю 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
Сборка персонального компьютера от Artline: умный выбор для современных пользователей