5 интересных способов деструктуризации JS

JavaScript ECMAScript 6

Автор: Дмитрий Павлютин Переводчик: Front-end Xiaozhi Источник: dmitripavlutin.com

Ставь лайк и смотри, поиск в WeChat【Переезд в мир】Обратите внимание на этого человека, который не имеет большого фабричного прошлого, но имеет восходящий и позитивный настрой. эта статьяGitHub GitHub.com/QQ449245884…Он был включен, статьи были классифицированы, и многие мои документы и учебные материалы были систематизированы.

Все говорили, что нет проекта для написания резюме, поэтому я помог вам найти проект, и это было с бонусом.【Учебник по строительству】.

Переключатель переменной

Обычно метод замены двух переменных требует дополнительной временной переменной, взгляните на пример:

let a = 1;
let b = 2;
let temp;

temp = a;
a = b;
b = temp;

a; // => 2
b; // => 1

tempэто временная переменная, она сначала сохраняетaценность . тогда поставьbЗначение, присвоенноеa, тоtempприсвоить значениеb.

Было бы проще использовать деструктурирование, не нужно призракаtempПеременная.

let a = 1;
let b = 2;

[a, b] = [b, a];

a; // => 2
b; // => 1

[a,b] = [b,a]это присваивание деструктуризации, справа создается массив[b, a],Прямо сейчас[2,1]. этот массив2назначен наa1 назначенb.

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

let zero = 2;
let one = 1;
let two = 0;

[zero, one, two] = [two, one, zero];

zero; // => 0
one;  // => 1
two;  // => 2

2. Доступ к элементам в массиве

Существует сценарий, в котором у нас может быть пустой массив элементов. и хотите получить доступ к первому, второму или n-му элементу массива, но использовать указанное значение по умолчанию, если элемент не существует.

обычно используют массивlengthприписывать судить

const colors = [];

let firstColor = 'white';
if (colors.length > 0) {
 firstColor = colors[0];
}

firstColor; // => 'white'

Использование деструкурирования массива, тот же эффект может быть достигнут более кратко:

const colors = [];

const [firstColor = 'white'] = colors;

firstColor; // => 'white'

const [firstColor = 'white'] = colorsДеконструкция будетcolorsПервый элемент массива присваиваетсяfirstColorПеременная. если массив находится в индексе0элементов нет, присвоить"white"По умолчанию.

Конечно, это может быть более гибко, если вы хотите получить доступ только ко второму элементу, вы можете сделать это.

const colors = [];

const [, secondColor = 'black'] = colors;

secondColor; // => 'black'

Обратите внимание на запятую слева от деструктуризации: это означает игнорировать первый элемент,secondColorиспользоватьcolorsИндекс в массиве1элементы назначаются.

3. Неизменяемые операции

когда я начну использоватьReactа такжеReduxКогда вынуждены написать какой-то код, который подчиняется неизменности. Хотя поначалу это было немного сложно, позже я увидел преимущество: было проще иметь дело с однонаправленным потоком данных.

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

const numbers = [1, 2, 3];

const [, ...fooNumbers] = numbers;

fooNumbers; // => [2, 3]
numbers; // => [1, 2, 3]

разрушать[, ... fooNumbers] = numbersсоздать новый массивfooNumbers,fooNumbersВключатьnumbersэлементов, кроме первого элемента.

numbersМассив не изменился, сохранив оперативную неизменность.

Таким же неизменяемым способом можно удалить свойство из объекта, затем попытаться удалить свойство из объектаbigудалятьfooАтрибуты:

const big = {
 foo: 'value Foo',
 bar: 'value Bar'
};

const { foo, ...small } = big;

small; // => { bar: 'value Bar' }
big; // => { foo: 'value Foo', bar: 'value Bar' }

4. Деконструкция итерируемых объектов

В предыдущих примерах деструктуризация использовалась для массивов, но мы можем деструктурировать любой объект, реализующий [итерируемый протокол][2].

Многие примитивные примитивные типы и объекты являются итерируемыми:array, string, typed arrays, setа такжеmap.

Если вы не хотите ограничиваться примитивными типами, вы можете настроить логику деструктурирования, реализуя итерируемый протокол.

moviesсодержитmovieсписок объектов. в деконструкцииmoviesкогда будетtitleПолучить его в виде строки — это здорово. Давайте реализуем собственный итератор.

const movies = {
  list: [
    { title: 'Heat' }, 
    { title: 'Interstellar' }
  ],
  [Symbol.iterator]() {
    let index = 0;
    return {
      next: () => {
        if (index < this.list.length) {
          const value = this.list[index++].title;
          return { value, done: false };
        }
        return { done: true };
      }
    };
  }
};

const [firstMovieTitle] = movies;
console.log(firstMovieTitle); // => 'Heat'

moviesОпределяя объектыSymbol.iteratorметод реализации итерируемого протокола, итерационные итерацииtitle.

следитьповторяемый протоколразрешитьmoviesОбъект разлагается вtitle, Первый способ заключается в чтении определенногоmoviesизtitle:const [firstMovieTitle] = movies.

5. Деконструкция динамических свойств

Как правило, деструктуризация объектов с помощью свойств более распространена, чем деструктуризация массивов.

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

const movie = { title: 'Heat' };

const { title } = movie;

title; // => 'Heat'

const {title} = movieсоздать переменнуюtitleИ собственностьmovie.titleприсвоенное ему значение.

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

Чтобы понять, как работает динамическая деструктуризация, напишитеgreetфункция:

function greet(obj, nameProp) {
 const { [nameProp]: name = 'Unknown' } = obj;
 return `Hello, ${name}!`;
}

greet({ name: 'Batman' }, 'name'); // => 'Hello, Batman!'
greet({ }, 'name'); // => 'Hello, Unknown!'

использовать2вызов с параметрамиgreet()Функция: Имя объекта и свойства.

существуетgreet()Внутренне деструктурирующее назначениеconst {[nameProp]:name ='Unknown'} = objИспользуйте квадратные скобки[nameProp]читать имена динамических свойств,nameПеременные получают динамические значения свойств.

Еще лучше, если свойство не существует, вы можете указать значение по умолчанию.Unknown".


Ошибки, которые могут существовать после деплоя кода, нельзя узнать в режиме реального времени.Чтобы решить эти ошибки потом, много времени тратится на отладку логов.Кстати, я хотел бы порекомендовать полезный [Инструмент мониторинга ошибок Фундебуг][3].

оригинал:Рисовая поездка avlutin.com/5-interest i…

общаться с

Статья постоянно обновляется каждую неделю. Вы можете выполнить поиск «Big Move to the World» в WeChat, чтобы прочитать и обновить ее как можно скорее (на одну или две статьи раньше, чем в блоге). Эта статья находится на GitHub.GitHub.com/QQ449245884…Он был включен, и многие мои документы были разобраны. Добро пожаловать в Звезду и совершенство. Вы можете обратиться в тестовый центр для ознакомления во время собеседования. Кроме того, обратите внимание на паблик-аккаунт и ответьте в фоновом режиме.Благосостояние, вы можете увидеть преимущества, вы знаете.

[1]: GitHub.com/QQ449245884… [2]: developer.Mozilla.org/en-US/docs/… [3]: woohoo.fun на bug.com/?UTM_source…