#javascript
Здравствуйте. Изучаю 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
Ответы
Ответ 1
почему в примере ниже числа складываются как строки Потому, что методы valueOf в обоих случаях возвращают строки, а если хотя бы один из операндов оператора + строка, то и второй операнд так же будет приведен к строке. Заменив возвращаемое значение на число, результат станет ожидаемым. var a = { valueOf: function() { return 1; } }; var b = { valueOf: function() { return 2; } }; console.log(a + b); Если копнуть чуть глубже, можно найти в спецификации алгоритм для оператора + В котором можно отметить шаги 5,6,7, в которых объекты приводятся к примитивам, и если хотя бы один из объектов был приведен к строке, то дальше происходит сложение строк. lprim <= ToPrimitive(lval). rprim <= ToPrimitive(rval). Если Type(lprim) или Type(rprim) - это строка, то lstr <= ToString(lprim). rstr <= ToString(rprim). Вернуть строку, которая является результатом конкатенации строк lstr и rstr. Подробнее про ToPrimitive можно посмотреть в ответе на вопрос В чем разница между valueOf и toString
Комментариев нет:
Отправить комментарий