Деструктуризация в JavaScript означает копирование значений массива или свойств объекта в переменную.
Деструктуризация не означает разрушения. Это не так, потому что массив или объект, из которого вы можете скопировать значения, не изменяется.
Это выражение JavaScript появилось в ECMAScript 2015/16.
В этой статье вы узнаете, как деструктурировать значения в массиве, свойства объекта и другие способы деструктуризации.
Базовая деструктуризация в массивах
Деструктуризация упрощает доступ к значениям массива.
Например,
Если вы хотите получить доступ к значениям в массиве без деструктуризации,
const array = ["deer","greet","heyy"]; const arr = array[0]; const arr1 = array[1]; console.log(arr); //deer console.log(arr1); //greet
В этом примере вы присвоили значения, используя их индекс. А вот с деструктуризацией так и будет.
const array = ["deer","greet","heyy"]; const [arr,arr1,arr2] = array; console.log(arr); //deer console.log(arr1); //greet
Таким образом, вы можете одновременно присваивать значения переменной array
новым переменным.
Обмен значениями
В массивах вы можете поменять местами значения в переменной, поменяв местами. Обычно для этого вам понадобится третья переменная.
Вот пример:
let arr = "deer"; let arr1 = "greet"; console.log(arr); //deer console.log(arr1); //greet let newArr = arr1; //assigning the value "greet" to a new variable "newArr" console.log(newArr); //greet arr1 = arr; //assigning the value "deer" to the variable "arr1" arr = newArr; //assigning the value "greet" to the variable "arr" console.log(arr1); //deer console.log(arr); //greet
Но с деструктурированием вы можете сделать это без третьей переменной.
const array = ["deer","greet","heyy"]; let [arr,arr1,arr2] = array; console.log(arr); //deer console.log(arr1); //greet [arr,arr1] = [arr1,arr]; //using destructuring to swap the values console.log(arr); //greet console.log(arr1); //deer
Пропуск значений
Вы также можете пропустить значения при присвоении значений переменной. Вы делаете это, добавляя дополнительную запятую к массиву, в который вы деструктурируете значения. Запятая указывает индекс значения.
В этом примере запятая в начале присваивания указывает на первое значение массива.
const array = ["deer","greet","heyy"]; const [,arr1,arr2] = array; //skipping the first value and using only the second and third console.log(arr1); //greet console.log(arr2); //heyy
Использование деструктуризации массива с итераторами
Деструктуризация массива работает со всеми итерируемыми значениями. Вы можете деструктурировать массив любого итерируемого значения. Примерами таких итерируемых объектов являются строки, наборы и т. д.
Например, используя деструктурирование массива для строки,
const [a,b] = "abc"; console.log(a); //a console.log(b); //b
пример использования деструктуризации массива в наборе,
const array = ["deer","greet","heyy"]; const exampleSet = new Set(array); const [arr,arr1,arr2] = exampleSet; console.log(arr); //deer console.log(arr1); //greet console.log(arr2); //heyyy
Деструктуризация массива работает только с итерируемыми значениями. Неитерируемые значения дадут ошибку. Примерами неитерируемых объектов являются null и undefined.
Кроме того, javascript вернет undefined, если массив, который вы деструктурируете, пуст.
например,
const [arr,arr1] = []; console.log(arr); //undefined console.log(arr1); //undefined
Вот еще один сценарий:
const array = []; const [arr,arr1] = array; console.log(arr); //undefined console.log(arr1); //undefined
Значения по умолчанию в массивах
При написании кода бывают случаи, когда вы можете быть не уверены в присваиваемых вами значениях. Если это значение равно undefined
, вам потребуется значение по умолчанию. Деструктуризация упрощает присвоение массиву значений по умолчанию.
См. этот пример:
const array = ["deer","greet","heyy"]; const [arr,arr1,arr2,arr3] = array; console.log(arr); //word console.log(arr1); //fang console.log(arr2); //grey console.log(arr3); //undefined
Чтобы назначить значение по умолчанию для arr3
const array = ["deer","greet","heyy"]; //To assign a default value to arr3 const [arr,arr1,arr2,arr3="mirrors"] = array; console.log(arr3); //mirrors
При этом вы можете присвоить значение по умолчанию переменной во время деструктуризации.
Использование остального синтаксиса
Деструктуризация в Javascript также использует оставшийся синтаксис. Он называется «остаточным» синтаксисом, так как охватывает остальные элементы массива. Синтаксис ...
, затем имя созданного массива. Имя «остальное», которое появляется после трех точек, не является обязательным. Вы можете использовать другое имя после трех точек.
Синтаксис:(...rest)
При использовании остаточного синтаксиса всегда убедитесь, что он идет последним после других элементов, так как в противном случае будет выдана ошибка.
Вот пример отдыха в массиве:
Используя предыдущий пример,
const array = ["deer","greet","heyy"]; const [arr, …newArr] = array; console.log(arr); //deer console.log(newArr); //[ greet, heyy]
Как видите, массив newArr
был создан из старого массива.
Деструктуризация объекта
С помощью деструктуризации объекта вы можете получить значения свойств из объекта. Объекты используют синтаксис, отличный от массивов, при присвоении значений переменным.
Чтобы присвоить значения без деструктурирования, было бы:
const obj = { word: "dataTypes", num: 0001, bool: true, bigInt: 2.99999999}; //example of the object //To access the object property const words = obj.word; const boolean = obj.bool; console.log(words) //dataTypes console.log(boolean) //true
Вот как присваивать значения объектам с помощью деструктуризации.
const obj = { word: "dataTypes", num: 0001, bool: true, bigInt: 2.99999999}; //example of the object//To access the object property const { word, bool } = obj; console.log(word) //dataTypes console.log(bool) //true
Это упрощает присвоение значений.
Примечание. Порядок объектов не имеет значения, и вы должны использовать одно и то же имя.
Это приведет к следующей ошибке:
const obj = { word: "dataTypes", num: 0001, bool: true, bigInt: 2.99999999}; const { words, boolean } = obj; console.log(words) console.log(boolean) //ReferenceError: obj is not defined
Это связано с тем, что JavaScript не хранит переменные words
и boolean
в качестве ссылок на объект, отсюда и ошибка.
Однако при деструктуризации значениям можно присвоить разные имена.
Присвоение различных имен свойствам объекта
Вы можете назначать различные имена свойствам объекта для доступа к ним.
const obj = { word: "dataTypes", num: 0001, bool: true, bigInt: 2.99999999}; const { word: words, bool: boolean } = obj; console.log(words) //dataTypes console.log(boolean) //true
Использование деструктуризации объектов в массивах
Вы можете использовать индекс массива как «свойство», когда применяете деструктуризацию объектов к массивам.
const {0:arr, 1:arr1, 2:arr2} = ["deer","greet","heyy"]; console.log(arr); //deer console.log(arr2); //heyy
Первоначальное объявление переменной
В объектах вы можете сначала объявить переменную, прежде чем присвоить ей значение.
let word; const obj = { word: "dataTypes", num: 0001, bool: true, bigInt: 2.99999999 }; ({ word } = obj); console.log(word); //dataTypes
Примечание: во время присваивания используйте круглые скобки, иначе JavaScript воспримет это как блочную функцию и вернет синтаксическую ошибку.
Использование остального синтаксиса в объектах
Вы можете использовать остальной синтаксис в объекте. Как и в массивах, оставшийся синтаксис идет в конце и охватывает остальные свойства объекта.
Вот пример:
const obj = { word: "dataTypes", num: 0001, bool: true, bigInt: 2.99999999}; //example of the object//To access the object property const { word: words, ...others } = obj; console.log(words); //dataTypes console.log(others); //{ num:0001, bool:true, bigInt:2.99999999 }
Примечание.
Как и в случае с массивами, javascript вернет undefined
, если он настроен на деструктурирование пустого объекта. Деструктуризация объекта вернет ошибку типа, если значения равны undefined
и null
.
Значения по умолчанию в объектах
В объекте вы можете присвоить значения по умолчанию переменным при деструктуризации. Если свойства не было в объекте, вы могли создать переменную и присвоить ей значение по умолчанию.
Например,
const obj = { word: "dataTypes", num: 0001, bool: true, bigInt: 2.99999999, }; //example of the objec//To access the object property const { word, bool, num, str="street" } = obj; console.log(word); //dataTypes console.log(str); //street
В этом примере значение по умолчанию street
было присвоено переменной str
при деструктуризации.
Краткое содержание
Это суммирует основные особенности деструктуризации в JavaScript. Надеюсь, вы чему-то научились из этого. Если вам понравилась эта статья, вы можете поделиться ею с другом или оставить комментарий. Спасибо за внимание.
Нужна дополнительная информация? Ознакомьтесь с этим руководством, чтобы узнать больше о деструктуризации в javascript.