Что такое деструктуризация в JavaScript?

JuniorJavaScript · Frontend·Обновлено 29 июня 2026
Коротко
Деструктуризация — это синтаксис ES6, позволяющий извлекать значения из массивов и свойства из объектов в отдельные переменные в одну строку.

Деструктуризация в JavaScript

Деструктуризация (destructuring assignment) — это синтаксический сахар ES6, который позволяет «распаковывать» значения из массивов или свойства из объектов в отдельные переменные. Код становится короче и читаемее.

Деструктуризация объектов

При деструктуризации объекта имена переменных должны совпадать с именами свойств:

const user = { name: 'Иван', age: 25, city: 'Москва' };

// Без деструктуризации
const name = user.name;
const age = user.age;

// С деструктуризацией
const { name, age } = user;
console.log(name); // 'Иван'

Переименование и значения по умолчанию

const { name: userName, role = 'user' } = user;
// userName = 'Иван', role = 'user' (так как свойства нет в объекте)

Вложенная деструктуризация

const { address: { street } } = { address: { street: 'Арбат' } };
console.log(street); // 'Арбат'

Деструктуризация массивов

Для массивов используются квадратные скобки, порядок имеет значение:

const colors = ['red', 'green', 'blue'];

const [first, second] = colors;
console.log(first);  // 'red'
console.log(second); // 'green'

Пропуск элементов

const [, , third] = colors;
console.log(third); // 'blue'

Rest-оператор

const [head, ...tail] = [1, 2, 3, 4];
console.log(head); // 1
console.log(tail); // [2, 3, 4]

Практические применения

Обмен переменных

let a = 1, b = 2;
[a, b] = [b, a];
console.log(a, b); // 2 1

Деструктуризация параметров функции

function greet({ name, age = 18 }) {
  return `Привет, ${name}! Тебе ${age} лет.`;
}

greet({ name: 'Анна', age: 22 }); // 'Привет, Анна! Тебе 22 лет.'

Деструктуризация возвращаемого значения

function getCoords() {
  return { x: 10, y: 20 };
}

const { x, y } = getCoords();

Важные нюансы

  • При деструктуризации null или undefined выбрасывается TypeError — нужно защищаться дефолтным значением или проверкой.
  • Значения по умолчанию срабатывают только если свойство равно undefined, но не null.
  • Порядок важен для массивов, но не для объектов.

Что хочет услышать интервьюер

Кандидат объяснит разницу между деструктуризацией объектов (по имени свойства) и массивов (по позиции)

Упомянет значения по умолчанию и переименование при деструктуризации объектов

Знает про rest-оператор (...rest) в деструктуризации

Понимает деструктуризацию параметров функции как практический паттерн

Осознаёт, что деструктуризация null/undefined вызывает ошибку

Пример: Деструктуризация объекта с переименованием и дефолтами

interface User {
  name: string;
  age?: number;
  role?: string;
}

const user: User = { name: 'Иван' };

// Переименование name -> userName, дефолты для отсутствующих полей
const { name: userName, age = 18, role = 'user' } = user;

console.log(userName); // 'Иван'
console.log(age);      // 18 (дефолт, так как undefined)
console.log(role);     // 'user' (дефолт)

Пример: Деструктуризация массива и обмен переменных

const scores = [95, 80, 70, 60, 50];

// Берём первый элемент, пропускаем второй, собираем остальные
const [best, , ...rest] = scores;

console.log(best); // 95
console.log(rest); // [70, 60, 50]

// Классический обмен без временной переменной
let a = 1, b = 2;
[a, b] = [b, a];
console.log(a, b); // 2 1

Пример: Деструктуризация параметров функции

interface Config {
  host: string;
  port?: number;
  ssl?: boolean;
}

// Деструктурируем прямо в параметрах — удобно для конфигов
function connect({ host, port = 3000, ssl = false }: Config): string {
  const protocol = ssl ? 'https' : 'http';
  return `${protocol}://${host}:${port}`;
}

console.log(connect({ host: 'example.com' }));
// 'http://example.com:3000'

Типичные ошибки

Путают синтаксис объектной и массивной деструктуризации (используют [] для объектов)

Не знают, что значение по умолчанию не срабатывает при null — только при undefined

Забывают про переименование переменных через двоеточие: { prop: newName }

Путают rest-оператор в деструктуризации с spread-оператором при вызове функций

Не обрабатывают случай, когда деструктурируемое значение может быть undefined/null

Лучшие курсы по теме

изображение курса

TypeScript с нуля

Антон Ларичев
AI-тренажерыAI-тренажеры
Практика в студииПрактика в студии
Гарантия
Бонусы
иконка звёздочки рейтинга4.8
3 999 ₽ 6 990 ₽
Подробнее
изображение курса

Feature-Sliced Design

Антон Ларичев
AI-тренажерыAI-тренажеры
Практика в студииПрактика в студии
Гарантия
Бонусы
иконка звёздочки рейтинга4.5
3 999 ₽ 6 990 ₽
Подробнее
изображение курса

Next.js - с нуля

Антон Ларичев
AI-тренажерыAI-тренажеры
Практика в студииПрактика в студии
Гарантия
Бонусы
иконка звёздочки рейтинга4.7
3 999 ₽ 6 990 ₽
Подробнее