РАЗРУШЕНИЕ JAVASCRIPT ES6 И НЕСКОЛЬКО ПОЛЕЗНЫХ УЛОВ
Это всего лишь краткое введение в Назначение деструктуризации в ECMAScript 6 (или, как большинство разработчиков называют JavaScript ES6), поскольку по этой теме есть множество отличных ресурсов; например:
- Изучение ES6, Глава 10. Деструктуризация
- Назначение MDN по деструктуризации.
В основном деструктуризация позволяет извлекать значения из объектов и массивов в именованные переменные; Мне нравится думать об этом как о противоположности конструированию литерала объекта или массива. Например, точечный объект можно объявить так:
const point = {
x: 1,
y: 2
}
Это сокращение для
const point = {}
point.x = 1
point.y = 2
Мы можем извлечь или уничтожить значения x и y из точечного объекта со следующим синтаксисом:
const {x: copyOfX, y: copyOfY} = point
Итак, теперь у нас есть две переменные с именами copyOfX и CopyOfY со значениями 1 и 2 соответственно. В качестве альтернативы, если имя извлеченной переменной совпадает с именем параметра объекта, синтаксис может быть более кратким:
const {x, y} = point
Это похоже на сокращение для создания переменных объектной формы:
const x = 1
const y = 2
const point = {x, y}
НАЗВАННЫЕ ФУНКЦИОНАЛЬНЫЕ ПАРАМЕТРЫ
Представьте себе функцию, для которой требуется длинный список параметров.
function foo (parameter, anotherParameter, someOtherParameter) {
// ... do something
}
Очевидная проблема с такой функцией - сложность запоминания порядка параметров при вызове функции. Простой подход к этой проблеме - обернуть параметры в объект и переписать функцию, чтобы она ожидала аргумента от этого объекта:
function foo (options) {
console.log(options.parameter)
console.log(options.anotherParameter)
console.log(options.someOtherParameter)
}
Однако мы можем переписать приведенную выше функцию, чтобы разбить ее единственный аргумент на именованные переменные и избавиться от надоедливой конструкции доступа к параметрам.
function foo ({parameter, anotherParameter, someOtherParameter}) {
console.log(parameter)
console.log(anotherParameter)
console.log(someOtherParameter)
}
ЗНАЧЕНИЯ ПО УМОЛЧАНИЮ
Еще одна приятная особенность деструктуризации - это возможность определять параметры по умолчанию, особенно для глубоко вложенных структур. Например, поле результатов эластичного поискового запроса скрыто внутри следующего объекта:
{
data: {
hits: {
hits: {
results: []
}
}
}
}
Вероятный сценарий - это требование функции, которая выполняет эластичный поисковый запрос и либо возвращает результаты, либо, если ничего не найдено, пустой массив. Если бы мы занимались защитным программированием и проверяли, существует ли каждое вложенное значение, используя pre-ES6, код мог бы выглядеть примерно так:
var results;
if(data && data.hits && data.hits.hits && data.hits.hits && data.hits.hits.results) {
results = data.hits.hits.results;
} else {
results = [];
}
Однако, используя назначение деструктуризации, его можно сжать до:
const {data: {hits: {hits: results = []} = {}} = {}} = response;
Это выглядит намного лучше. Одна проблема, о которой вам нужно знать, - это необходимость дать всему объекту значение по умолчанию для пустого объекта {} - это потому, что алгоритм деструктуризации не может привести к объекту неопределенное значение.
РЕЗЮМЕ
Я перечислил лишь несколько вариантов использования деструктуризации. Если вы хотите узнать больше, просмотрите ссылки, перечисленные в начале сообщения. Спасибо за чтение.
Если вы нашли эту статью полезной / вдохновляющей, нажмите 💚 , чтобы другие тоже могли ею насладиться.
Спасибо за уделенное время! Следуйте за мной в Twitter и LinkedIn.