обучения JavaScript
ES6 предоставляет более краткий режим присваивания для извлечения значений из массивов и объектов, который называется деструктуризацией.
Пример:
[a, b] = [50, 100]; console.log(а); // ожидаемый результат: 50 console.log(б); // ожидаемый результат: 100 [a, b, ...rest] = [10, 20, 30, 40, 50]; console.log(остальное); // ожидаемый результат: [30, 40, 50]
Деструктуризация массива очень проста и лаконична. Используйте литерал массива в левой части выражения присваивания. Каждое имя переменной в литерале массива сопоставляется с одним и тем же индексом деструктурированного массива. Что означает элемент
? Как и в примере ниже, элементы массива слева получают значения соответствующих индексов деструктурированного массива справа
let [a, b, c] = [1, 2, 3]; // а = 1 // б = 2 // c = 3
Вы можете деконструировать присваивания отдельно с помощью объявлений переменных.
Пример: объявить переменные, присвоить значения отдельно
// Объявить переменные let a, b; // Затем присваиваем значения [a, b] = [1, 2]; консоль.журнал(а); // 1 console.log(b); // 2
Если значение, полученное при деструктуризации, undefined
, вы можете установить значение по умолчанию:
let a, b; // Устанавливаем значение по умолчанию [a = 5, b = 7] = [1]; консоль.журнал(а); // 1 console.log(b); // 7В
приведенном выше примере мы устанавливаем значения по умолчанию как для a, так и для b. В этом случае, если значение a или b undefined
, соответствующее значение будет присвоено установленному по умолчанию. Переменные (5 присваивается a, 7 присваивается b)
Раньше, когда мы обменивали две переменные, мы всегда использовали
//exchange abc = a;a = b;b = c
;
Однако при деконструкции При присваивании мы можем поменять значения двух переменных в выражении деструктуризации
let a = 1; let b = 3; // Обменять значения a и b [a, b] = [b, a]; console.log( a); // 3console.log(b); // 1
Мы можем напрямую деконструировать функцию, которая возвращает массив
function c() { return [10, 20];}let a, b;[a, b] = c();console.log(a); // 10console.log(b); // 20
В приведенном выше примере ** возвращаемое значение [10, 20] функции c()** можно использовать в отдельной строке кода
Вы можете выборочно пропустить некоторые нежелательные возвращаемые значения
функции c (. ) { return [1, 2, 3];}let [a, , b] = c();console.log(a); // 1console.log(b); // 3
, когда вы При использовании деструктуризации массива вы можете присвоить все оставшиеся части назначенного массива переменной
let [a, ...b] = [1, 2, 3];console.log(a); // 1console;.log
(
b ); // [2, 3]
В этом случае b также станет массивом, а элементами массива будут все остальные элементы.
Будьте осторожны: вы не можете поставить запятую в конце. Если есть лишняя запятая, будет сообщено об ошибке
let [a, ...b,] = [1, 2, 3];// SyntaxError: rest element. может не иметь завершающей запятой
Как и объекты, массивы могут быть вложенными.
Пример:
const color = ['#FF00FF', [255, 0, 255], 'rgb(255, 0, 255)']; // Используем вложенную деструктуризацию для назначения красного, зеленого и синего // Используем вложенную деструктуризацию для назначения красного, зеленого и синего const [шестнадцатеричный, [красный, зеленый, синий]] = цвет; console.log(hex, red, green, blue); // #FF00FF 255 0 255
При деструктуризации массива, если целью деструктуризации является проходимый объект, можно выполнить деструктуризацию и присваивание. Проходимый объект реализует интерфейс Iterator. Данные
let [a, b, c, d, e] = 'привет';/* а = 'ч' б = 'е' с = 'л' д = 'л' е = 'о' */
let x = { y: 22, z: true }; let { y, z } = x; // let {y:y,z:z} = сокращение для x; // 22; console.log(z); //
Имя переменной можно изменить при использовании деструктуризации объекта
let o = { p: 22, q: true }; пусть {p: foo, q: bar} = o; консоль.журнал(фу); // 22; console.log(bar); // истинный
код, как указано выше var {p: foo} = o
получает имя свойства p объекта o, а затем присваивает его переменной с именем foo.
. out путем деструктуризации undefined
, мы Вы можете установить значение по умолчанию
let { a = 10, b = 5 } = { a: 3 }; консоль.журнал(а); // 3 console.log(b); // 5
Как упоминалось ранее, мы присваиваем значение новому имени объекта. , если он не деконструирован, автоматически будет использоваться значение по умолчанию
let { a: aa = 10, b: bb = 5 } = { a: 3 }; консоль.журнал(аа); // 3 console.log(bb); // 5
Массивы и объекты можно использовать вместе в структурах
const props = [. { id: 1, имя: 'Физз' }, { id: 2, имя: «Живая лента» }, { id: 3, имя: 'FizzBuzz' }, ]; const [, , {имя}] = реквизит; console.log(name); // "FizzBuzz"
let obj = {p: [{y: 'world'}] }; let {p: [{ y }, x ] } = obj; // Не деконструировать x // х = не определено // y = 'world'
let {a, b, ...rest} = {a: 10, b: 20, c: 30, d: 40}; // а = 10 // б = 20 // rest = {c: 30, d: 40}
let obj = {p: ['hello', {y: 'world'}] }; пусть {p: [x, {y}] } = obj; // x = 'привет' // y = 'мир' let obj = {p: ['привет', {y: 'мир'}] }; let {p: [x, { }] } = obj;//игнорируем y // x = 'hello'
демонстрации ошибок деструктуризации:
let x;{x} = {x: 1}.
Движок JavaScript воспримет {x}
как блок кода, что приведет к синтаксису. ошибка. Мы хотим избежать написания фигурных скобок в начале строки, чтобы JavaScript не интерпретировал их как блок кода.
способ
записи
:
пусть
функция add([x, y]) { return x + y;}add([1, 2]);
В приведенном выше коде параметр функции add представляет собой массив на поверхности, но при передаче параметра параметр массива разбивается на переменные x и y. Внутри функции это то же самое, что и прямая передача x и y.
Использование деструктуризации — этодеструктурирующего присваивания. Существует множество способов
пусть x = 1; пусть у = 2; [x, y] = [y, x];Приведенный выше код меняет значения x и y. Этот метод
не только краток, но и легко читается, а семантика ясна.
может возвращать только одно значение. Если вы хотите вернуть несколько значений, мы можем поместить эти значения только в массив или объект и вернуть их. Когда у нас есть деструктурирующее присваивание, принимая эти значения. Из объекта или массива это похоже на поиск чего-либо
// Возврат функции массива example() { return [1, 2, 3];}let [a, b, c] = example(); // Возвращаем объектную функцию example() { возвращаться { фу: 1, бар: 2 }; }let { foo, bar } = example();Извлечение
деструктуризации
Пример:
let jsonData = {. идентификатор: 42, статус: «ОК», данные: [867, 5309] }; пусть {идентификатор, статус, данные: номер} = jsonData; console.log(id, статус, номер); // 42, "OK", [867, 5309]
Используя приведенный выше код, мы можем быстро получить значение в данных JSON.
Рекомендации по теме: Учебное пособие по JavaScript.
Вышеизложенное поможет вам понять детали назначения деструктуризации JavaScript. Для получения дополнительной информации, пожалуйста, обратите внимание на php. Другие статьи по теме на китайском сайте!