Деструктивное присваивание - упрощает извлечение данных из массивов и объектов, при помощи более короткого синтаксиса.
let languages = ['JavaScript', 'PHP', 'Ruby', 'Python'];
// получение данных в ES5
let js = languages[0];
let php = languages[1];
let rb = languages[2];
let py = languages[3];
// получение данных в ES6
let js, php, rb, py;
[js, php, rb, py] = languages;
Слева в скобках (деструктивное выражение) [js, php, rb, py] - помещаем переменные которым хотим присвоить значения элементов массива.
Код можно сильно упростить:
let [js, php, rb, py] = languages;
Имеется возможность игнорировать некоторые значения. Для этого вместо имени переменной оставляется пустое место и ставится запятая.
let [js, php, , py] = languages;
Для последней переменной деструктивного присваивания массива можно использовать синтаксис оставшихся параметров - ти точки ... В этом случае переменная будет преобразована в массив.
let scores = [3, 4, 5];
let [low, ...rest] = scores;
console.log(low, rest); // 3 Array [ 4, 5 ]
Можно использовать значения по умолчанию
let scores = [3, 4];
let [low, mid, high = 5] = scores;
console.log(low, mid, high); // 3 4 5
Можно использовать когда элемент является массивом
let scores = [3, 4, [5, 6]];
let [low, mid, high] = scores;
console.log(low, mid, high); // 3 4 Array [ 5, 6 ]
Можно использовать как параметр функции
function countScore([low, mid]){
console.log(low, mid);
}
countScore([3, 4]); // 3 4
Можно использовать для возврата нескольких значений из функции
function getScore(){
return [3, 4, 5];
}
let [low, mid, high] = getScore();
console.log(low, mid, high); // 3 4 5
Можно использовать чтобы быстро обменять значения переменных
let yes = 'Yes';
let no = 'No';
[yes, no] = [no, yes];
console.log('Yes is ', yes); // Yes is No
console.log('No is ', no); // No is Yes