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

Деструктуризация - это способ извлечения и присвоения значений внутри объектов и массивов переменным. Он был стандартизирован комитетом ECMAScript в 2015 году для выпуска JavaScript ES6. Деструктуризация - одна из ключевых функций ES6, которая позволит разработчикам сократить подробный синтаксис и создавать современные и разборчивые программы на JavaScript.

Объекты в JavaScript инициализируются и структурируются следующим образом:

const obj = {
 firstName: ‘Gaby’, 
 lastName: ‘Perez’
 }
 

До ES6 можно было извлекать значения в переменные одно за другим:

const firstName = obj.firstName
const lastName = obj.lastName
console.log(lastName) // ‘Perez’

Теперь с деструктуризацией присваивания переменной:

const { firstName, lastName } = obj
console.log(lastName) // ‘Perez’

Теперь у нас есть две переменные, которым присвоены соответствующие значения из одной строки кода. Деструктуризация - это ясный и лаконичный способ объявить только те переменные, которые вам нужны, и связать их со значением в той же строке. При использовании деструктурирующих присваиваний помните, что имя переменной и имя ключа должны соответствовать, чтобы программа знала, к какому значению ей нужно получить доступ.

Тот же шаблон извлечения применяется к массивам в JavaScript. Вместо ключей переменные объявляются относительно позиции индекса в массиве.

const [ fifty, lol ] = [50, 82]
console.log(lol) // 82

Шаблон присваивания деструктурирования проявляется при обращении к значениям во вложенных структурах объектов.

const student = {
  name: ‘Ray Lo’,
    subjects: {
      math: ‘B+’,
      science: ‘A’,
    },
  }
const { math, science } = student.subjects
console.log(science) // ‘A’

В назначении деструктуризации цель находится слева от знака равенства, а источник - справа. Это различие является фундаментальным для иллюстрации следующих нескольких концепций этого стиля назначения.

Элисион

При работе с массивами можно пропускать значения с запятыми в целевом объекте, чтобы получить доступ к нужным значениям в назначении. Эта техника известна как элизия, которая определяется как пропуск звука или слога при разговоре.

const arr = [‘hey’, ‘hello’, ‘sup’, ‘destructuring is cool’];
const [greet, , , message] = arr
console.log(message) // ‘destructuring is cool’

Значения по умолчанию

Если возможно, что значение в вашем объекте может возвращаться как undefined, можно назначить значения по умолчанию в целевом объекте, чтобы избежать появления ошибок в программе.

const { a = 5, b = 12 } = { a : 200 }
console.log(a) // 200
console.log(b) // 12

Переназначение

Также возможно переназначить имена переменных внутри самой цели деструктуризации. Это может быть полезно для того, чтобы сделать ваши переменные более семантическими для последующего использования в вашей программе.

const obj = { greeting: ‘HEY’, wait: ‘HOLD UP’ }
const { greeting : sup, wait : chill } = obj
console.log(sup) // ‘HEY’
console.log(chill) // ‘HOLD UP’

Вложенный доступ

Идея вложенного доступа основана на синтаксисе переназначения, рассмотренном выше. Этот шаблон полезен для доступа к глубоко вложенным объектам, которые содержат отдельные объекты, из которых вы хотите извлечь значения. Поглощение этой идеи поможет сохранить ваш код СУХИМ.

Ключевое отличие здесь состоит в том, что в переменной после двоеточия в цели мы оборачиваем переменную справа другой парой фигурных скобок для доступа к значению, хранящемуся внутри. Поскольку это имя переменной соответствует ключу объекта, вложенному в наш родительский объект, мы можем наложить синтаксис деструктуризации внутри себя и получить доступ к нужным вложенным значениям.

const nestedObj = {
  students:{
    autumn:{
      graduated: 1312
    }, 
    winter:{ 
      total: 1337
    }
  }
}
const { autumn: {graduated}, winter: {total} } = nestedObj.students
console.log(graduated, ‘/////’, total)
> 1312 ‘/////’ 1337

Резюме

Деструктуризация - это мощный синтаксис присваивания, позволяющий делать краткие объявления переменных, и применение этой концепции в программах позволит писать элегантный JavaScript.