Страницы

Поиск по вопросам

вторник, 18 февраля 2020 г.

Js, численное преобразование в объектах

#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

Комментариев нет:

Отправить комментарий