@FeelsGoodMan

Почему преобразование объекта дает такой результат?

let user = {
name: "John",
money: 1000,

toString() {
return `{name: "${this.name}"}`;
},

valueOf() {
return this.money;
}

};

alert(user); // toString -> {name: "John"}
alert(+user); // valueOf -> 1000 и NaN если удалить метод
alert(user + 500); // valueOf -> 1500

Почему удалив реализацию метода valueOf, alert(+user) выдает NaN, делая преобразование явно, ведь по логике при отсутствии valueOf должен использоваться метод toString?
  • Вопрос задан
  • 76 просмотров
Решения вопроса 1
ruddy22
@ruddy22
борода не растет
потому что...
1. когда ты написал `valueOf` и добавил реализацию, то ты переопределил существующий метод, который был унаследован от Object.
2. когда ты удаляешь реализацию метода `valueOf`, то переопределения не происходит и вызывается "нативный" для объекта метод `valueOf`, который возвращает "[object Object]"
3. когда ты пишешь `+user`, то NaN получается потому что строка `'{name: "John"}'` не может быть приведена к числу
4. когда ты пишешь `user+500`, то у тебя будет вызван либо `valueOf` (если переопределен), либо `toString`

https://developer.mozilla.org/ru/docs/Web/JavaScri...
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы
04 апр. 2020, в 23:07
30000 руб./за проект
04 апр. 2020, в 23:05
100000 руб./за проект
04 апр. 2020, в 22:57
2000 руб./за проект