JS Core

Деструктуризация и spread/rest

Научиться извлекать значения из массивов и объектов через деструктуризацию, а также использовать spread для копирования и rest для сбора остатка.

Начальный (Beginner)
Нужно знать:Object.keys, values, entries

Кратко

Деструктуризация — способ разложить массив или объект на отдельные переменные: const { name, age } = user. Spread (...) — разворачивает массив/объект: [...arr1, ...arr2]. Rest (...) — собирает остаток: const [first, ...rest] = arr.


Подробно

Деструктуризация массивов: const [a, b, c] = [1, 2, 3]; // a = 1, b = 2, c = 3

Пропуск элементов: const [first, , third] = [1, 2, 3]; // first = 1, third = 3

Деструктуризация объектов: const { name, age } = { name: 'Анна', age: 25 }; // name = 'Анна', age = 25

С переименованием: const { name: userName } = { name: 'Анна' }; // userName = 'Анна'

С значением по умолчанию: const { name, age = 0 } = { name: 'Анна' }; // name = 'Анна', age = 0

Spread (...) — разворачивает: const arr1 = [1, 2]; const arr2 = [3, 4]; const merged = [...arr1, ...arr2]; // [1, 2, 3, 4]

const obj1 = { a: 1 }; const obj2 = { b: 2 }; const mergedObj = { ...obj1, ...obj2 }; // { a: 1, b: 2 }

Rest (...) — собирает остаток: const [first, ...rest] = [1, 2, 3, 4]; // first = 1, rest = [2, 3, 4]

const { name, ...rest } = { name: 'Анна', age: 25, city: 'Москва' }; // name = 'Анна', rest = { age: 25, city: 'Москва' }


Ментальная модель

Деструктуризация — как распаковка подарка: открываете коробку (массив/объект) и достаёте конкретные вещи (переменные). Spread — как высыпать содержимое коробки. Rest — как собрать всё, что не достали по отдельности.


Примеры

**Самый простой:**

javascript
const [a, b] = [10, 20];
console.log(a); // 10
console.log(b); // 20

Деструктуризация массива: разложили на две переменные.

**Простой:**

javascript
const user = { name: 'Анна', age: 25, city: 'Москва' };
const { name, age } = user;
console.log(name); // 'Анна'
console.log(age);  // 25

Деструктуризация объекта: извлекаем name и age, city игнорируется.

**Реальный пример:**

javascript
function createUser(name, options = {}) {
  const { age = 0, active = true } = options;
  return { name, age, active };
}

const user = createUser('Анна', { age: 25 });
console.log(user); // { name: 'Анна', age: 25, active: true }

Деструктуризация + значения по умолчанию — мощный паттерн для параметров функций.


Частые ошибки

**Неправильно:** Путать spread и rest

**Почему:** Spread разворачивает (...arr), rest собирает (...args). Символ один — смысл противоположный.

**Правильно:** Spread: const arr2 = [...arr1]. Rest: const [first, ...rest] = arr.

**Неправильно:** Забывать, что rest должен быть последним

**Почему:** const [a, ...rest, b] = [1,2,3,4]; — SyntaxError! Rest не может быть в середине.

**Правильно:** Rest должен быть последним элементом: const [a, ...rest] = arr.

**Неправильно:** Думать, что spread создаёт глубокую копию

**Почему:** Spread создаёт поверхностную копию. Вложенные объекты остаются ссылками.

**Правильно:** Для глубокой копии: structuredClone(obj) или JSON.parse(JSON.stringify(obj)).


Важно запомнить

  • Деструктуризация извлекает значения в переменные
  • Spread (...) разворачивает массив/объект
  • Rest (...) собирает остаток
  • Spread создаёт поверхностную копию
  • Rest должен быть последним элементом

Связь

Назад: Вы знаете объекты и массивы (J11-J17) — теперь у вас есть мощный синтаксис для работы с ними.

Вперёд: Следующий урок (J19) — Date: работа с датами и временем в JavaScript.

Материалы курса JS Core — PROlab Academy.