ES6: Реструктуризующее присваивание
Скорее всего, вы уже видели несколько примеров использования реструктуризующего присваивания, или destructuring. Данная синтаксическая конструкция используется для извлечения данных из массивов и объектов.
Чтобы вас не смущало такое хитрое название, можно представить процесс, не как разложение объекта или массива на его составляющие, а как простое структурированное присваивание. Проще всего понять новую синтаксическю конструкцию можно, рассмотрев пример из прошлого:
Проще говоря, раньше приходилось записывать каждую переменную по отдельности вручную. А если приходилось иметь дело с динамическими данными, то могла понадобиться и ещё одна дополнительная переменная:
С релизом ES6 всё стало в разы проще:
Destructuring с объектами
Создание нескольких переменных одновременно из объекта настолько же простое, как и из массива. Если вы хотите создать переменную с тем же именем, что и свойство объекта, то можно использовать сокращенную конструкцию:
В другом случае, когда имя переменной отличается от свойства, используется полный вариант:
Важно понимать отличие реструктуризующего присваивания от создания объекта с помощью литерала:
Создавая объект с помощью литерала, вы следуете правилу: справа находится свойство, слева − значение { свойство: значение }
. Подобное присваивание свойств интуитивно понятно, так как можно представить его, как обычное присваивание значение переменной переменная = значение
.
Однако, когда вы используете реструктуризующее присваивание, названное выше правило действует в точности наоборот { значение: свойство }
.
В случае var obj = { x: a, y: b }
x и y представляют свойства объекта. В случае var { x: A, y: B } = obj;
x и y тоже представляют свойства.
Присваивание при отсутствии свойства
Если переданного вами свойства нет в объекте, то вы получите переменную, содержащую undefined
:
Вложенность
Реструктуризующее присваивание можно использовать с любым уровнем вложенности:
Обращение к свойствам примитивов
Примитивные значения не являются объектами, но обладают свойствами и методами, которые можно получить с помощью реструктуризующего присваивания:
Destructuring с массивами
Выше я уже рассматривал пример применения destructuring с массивами. В целом, применение достаточно схоже с объектами, за исключением двух ключевых особенностей:
Работает с любыми коллекциями
Можно использовать оператор spread при присваивании
В данном случае переменные a и b получат соответственно значения 1
и 2
, а переменная c все оставшиеся значения в виде массива [3, 4, 5]
.
Параметры по умолчанию
При использовании реструктуризующего присваивания можно задать параметры по умолчанию, на случай, если массив или объект не содержат присваиваемого свойства:
Также, как и в случае с функциями, в качестве параметра по умолчанию можно передать выполнение какой-либо функции:
Комментарии