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

Деструктуризация объектов – это новый (относительно) синтаксис Javascript, который позволяет нам сохранять свойства объектов в уникальных переменных.

Объект в Javascript выглядит так:

  const me = {
      	firstname: "seyi",
      	surname: "adeleke"
    };

До ES6 единственный способ получить доступ к свойству firstname в объекте me – это создать новую переменную и затем назначить ее с помощью синтаксиса objectName.propertyName или objectName["propertyName"], подобного этому:

const firstname = me.firstname;
const surname = me.surname;

Это все хорошо, но что, если бы у нас был более сложный объект с глубоко вложенными объектами в качестве свойств. Объект ниже вложен на два уровня в глубину.

    const myObject = {
      property1: {
        innerProperty1: {
          key: 'value',
        }
      }
    } 

Чтобы получить доступ к ключевому свойству в указанном выше объекте, нам нужно будет написать связанное выражение this.

const key = myObject.property1.innerProperty1.key;

Это могло бы быть еще более сложным, если бы нам нужно было проверить, существует ли key перед доступом к нему. Тогда нам придется писать следующее:

const key = myObject.property1.innerProperty1.key && myObject.property1.innerProperty1.key

Деструктуризация помогает нам решить проблему нечистого кода, используя следующий синтаксис:

    const {firstname, surname} = me;
    console.log(firstname); // 'seyi'
    console.log(surname); // 'adeleke'

В приведенном выше коде мы создаем новый объект { firstname, surname } который представляет собой список имен переменных. Затем мы можем использовать эти переменные в остальной части нашего кода.

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

    { firstname: firstname }
    {firstname}

Зная это, теперь мы можем присвоить свойству другое имя, например так:

console.log(fName); // 'seyi'

Разрушение вложенного объекта выполняется по тем же правилам. Используя сложный объект, который у нас есть выше, в качестве примера. Мы можем извлечь переменную key вот так:

    const { 
              property1: { 
                innerProperty1: { 
                    key: k 
                  } 
              } 
          } = myObject;
    console.log(k); // 'value'

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

    const me = {
      surname: 'adeleke'
    }
    
    const {firstname: fName = "seyi", surname} = me;
    console.log(fName); // 'seyi'
  • Разрушение позволяет нам распаковывать свойства объектов в переменные
  • При деструктуризации используется следующий синтаксис:
    const { property: newVariable = defaultValue } = myObject;
    console.log(newVariable); // defaultValue

Ответить