JS - копирование объекта:
- Для копирования объектов есть функция assign. Как она работает:
- функция принадлежит объекту Oblect, поэтому вызывается через Object.assign().
- Она принимает параметры: target - единственный, source - множество, где:
1. target - объект, который возвратит функция.
2. source - объект, из которого копируются ключи-значения.
Пример с клонированием объекта:
let obj = { key: value }
let clone = Object.assign({}, obj)
Здесь функция копирует в пустой объект содержимое obj и присваивает пустой объект переменной clone. Source может быть и объект, определенный прямо в функции.
ВАЖНО: порядок указания sources задает приоритет перезаписи свойств при клонировании. Например в коде:
Object.assign({}, src1, src2)
src1 будет иметь больший приоритет, и если в src2 встретится свойство, аналогичное содержащемуся в src1, оно будет перезаписано свойством из src1.
Эта тема важна для понимания иммутабельности в React.
#JS #React
- Для копирования объектов есть функция assign. Как она работает:
- функция принадлежит объекту Oblect, поэтому вызывается через Object.assign().
- Она принимает параметры: target - единственный, source - множество, где:
1. target - объект, который возвратит функция.
2. source - объект, из которого копируются ключи-значения.
Пример с клонированием объекта:
let obj = { key: value }
let clone = Object.assign({}, obj)
Здесь функция копирует в пустой объект содержимое obj и присваивает пустой объект переменной clone. Source может быть и объект, определенный прямо в функции.
ВАЖНО: порядок указания sources задает приоритет перезаписи свойств при клонировании. Например в коде:
Object.assign({}, src1, src2)
src1 будет иметь больший приоритет, и если в src2 встретится свойство, аналогичное содержащемуся в src1, оно будет перезаписано свойством из src1.
Эта тема важна для понимания иммутабельности в React.
#JS #React
JS: spread-оператор для массивов
- Как выглядит spread-оператор:
let clone = [...array];
Внешне он похож на rest-оператор.
- Что он делает?
Раскладывает массив на отдельные элементы.
- Какие задачи решает?
1. Передача массива функции. В ES5 для этого требовался метод apply либо другие, более сложные кастомные функции. Spread упрощает задачу:
const test = (...array) => array.map((i) => i * 2);
console.log(test(...[5, 4, 3])) // 10, 8, 6
2. Клонирование массива (свойств, но не ссылки на оригинал):
const array = [a, b, c];
const clone = [...array]; // [a, b, c]
3. Преобразование коллекций в массивы:
const links = [...document.querySelectorAll('a')];
#JS
- Как выглядит spread-оператор:
let clone = [...array];
Внешне он похож на rest-оператор.
- Что он делает?
Раскладывает массив на отдельные элементы.
- Какие задачи решает?
1. Передача массива функции. В ES5 для этого требовался метод apply либо другие, более сложные кастомные функции. Spread упрощает задачу:
const test = (...array) => array.map((i) => i * 2);
console.log(test(...[5, 4, 3])) // 10, 8, 6
2. Клонирование массива (свойств, но не ссылки на оригинал):
const array = [a, b, c];
const clone = [...array]; // [a, b, c]
3. Преобразование коллекций в массивы:
const links = [...document.querySelectorAll('a')];
#JS
JS - деструктуризация объектов:
Рассмотрим сложный случай:
const { hello, bye, space: { full = 'Vacuum' } = {} } = obj;
Что здесь происходит:
1. Объявляется константа.
2. Ей присваевается объект obj;
3. В фигурных скобках создаются константы с именами свойств этого объекта - hello, bye, space, full.
4. Константа space содержит значение по-умолчанию:
1. Если в объекте нет значения space, оно задаётся как новый пустой объект;
2. Если в новом объекте нет значения full (а его там нет), создается константа full со значением по-умолчанию "Vacuum". Если в объект добавить такое свойство, значение по-умолчанию будет проигнорировано.
Боевое применение деструктуризации (и значений по-умолчанию):
Когда функции или модулю передается объект опций, можно деструктурировать его и одновременно присвоить значения по-умолчанию прямо на входе:
const handlerFunction = ({login = 'admin', port = '860'} = {}) => { // some code }
Заметим, что объекту опций по-умолчанию присвоен пустой объект: так обходится ошибка при вызове функций полностью без аргументов.
Деструктуризация помогает в создании копий объектов или включении их в новый, не используя Object.assign:
const clone = { ...src1, ...src2 }
#JS
Рассмотрим сложный случай:
const { hello, bye, space: { full = 'Vacuum' } = {} } = obj;
Что здесь происходит:
1. Объявляется константа.
2. Ей присваевается объект obj;
3. В фигурных скобках создаются константы с именами свойств этого объекта - hello, bye, space, full.
4. Константа space содержит значение по-умолчанию:
1. Если в объекте нет значения space, оно задаётся как новый пустой объект;
2. Если в новом объекте нет значения full (а его там нет), создается константа full со значением по-умолчанию "Vacuum". Если в объект добавить такое свойство, значение по-умолчанию будет проигнорировано.
Боевое применение деструктуризации (и значений по-умолчанию):
Когда функции или модулю передается объект опций, можно деструктурировать его и одновременно присвоить значения по-умолчанию прямо на входе:
const handlerFunction = ({login = 'admin', port = '860'} = {}) => { // some code }
Заметим, что объекту опций по-умолчанию присвоен пустой объект: так обходится ошибка при вызове функций полностью без аргументов.
Деструктуризация помогает в создании копий объектов или включении их в новый, не используя Object.assign:
const clone = { ...src1, ...src2 }
#JS