Автор: Дмитрий Павлютин Переводчик: 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
назначен наa
1 назначен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…