J: Основы JavaScript. Преобразование объектов в примитивы - видео HD

J: Основы JavaScript. Преобразование объектов в примитивы - видео
00:09:02

12n.ru 16773 ролика

Основы JavaScript. Преобразование объектов в примитивы - видео.

В данном скринкасте мы разберем еще один вид преобразований: преобразование объектов в примитивы. Мы долго готовились к этой теме, рассматривая другие привидения типов, поэтому отнеситесь к ней более внимательно. Также мы затронем тему математических операций, которые станут основным объектом обсуждения в следующих видео.
RSS
Максим Максимов
10:50
На каком устройстве работаешь
Комментарий удален
Комментарий удален
crystall Pro
21:59
Когда стрим по игре?
RM
07:57
Спасибо за LearnJS

Symbol.toPrimitive
Начнём с универсального подхода – символа Symbol.toPrimitive: метод с таким названием (если есть) используется для всех преобразований:

obj[Symbol.toPrimitive] = function(hint) {
// должен вернуть примитивное значение
// hint равно чему-то одному из: «string», «number» или «default»
};
Для примера используем его в реализации объекта user:

let user = {
name: «John»,
money: 1000,

[Symbol.toPrimitive](hint) {
alert(`hint: ${hint}`);
return hint == «string»? `{name: "${this.name}"}`: this.money;
}
};

// демонстрация результатов преобразований:
alert(user); // hint: string -> {name: «John»}
alert(+user); // hint: number -> 1000
alert(user + 500); // hint: default -> 1500
Как мы видим из кода, user преобразовывается либо в информативную читаемую строку, либо в денежный счёт в зависимости от значения хинта. Единственный метод user[Symbol.toPrimitive] смог обработать все случаи преобразований.

Методы toString/valueOf
Методы toString и valueOf берут своё начало с древних времён. Они не символы, так как в то время символов ещё не существовало, а просто обычные методы объектов со строковыми именами. Они предоставляют «устаревший» способ реализации преобразований объектов.

Если нет метода Symbol.toPrimitive, движок JavaScript пытается найти эти методы и вызвать их следующим образом:

toString -> valueOf для хинта со значением «string».
valueOf -> toString – в ином случае.
Для примера, используем их в реализации всё того же объекта user. Воспроизведём его поведение комбинацией методов toString и valueOf:

let user = {
name: «John»,
money: 1000,

// для хинта равного «string»
toString() {
return `{name: "${this.name}"}`;
},

// для хинта равного «number» или «default»
valueOf() {
return this.money;
}

};

alert(user); // toString -> {name: «John»}
alert(+user); // valueOf -> 1000
alert(user + 500); // valueOf -> 1500
Как видим, получилось то же поведение, что и в предыдущем примере с Symbol.toPrimitive.

Довольно часто мы хотим описать одно «универсальное» преобразование объекта к примитиву для всех ситуаций. Для этого достаточно создать один toString:

let user = {
name: «John»,

toString() {
return this.name;
}
};

alert(user); // toString -> John
alert(user + 500); // toString -> John500
Neo
11:33
+1
Ты полностью перечитал learn.javasciprt.ru. От себя говори, от своих слов.
Ervand Shokaryan
16:13
Простая перечитка из learn javascript… шустрый какой