這篇文章主要介紹“JS解構的使用方法有哪些”的相關知識,小編通過實際案例向大家展示操作過程,操作方法簡單快捷,實用性強,希望這篇“JS解構的使用方法有哪些”文章能幫助大家解決問題。
交換2個變量的的常用做法是需要一個額外的臨時變量,來看一個簡單的場景:
let a = 1;
let b = 2;
let temp;
temp = a;
a = b;
b = temp;
a; // => 2
b; // => 1
temp是一個臨時變量,它保存a的值,然后將b的值賦給a,最后再把temp中保存的a的值賦給b,完成了交換。
解構賦值使變量交換更簡單,不需要顯式創建臨時變量:
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
你可以交換任意多的變量!不過,交換兩個變量是最常見的場景。
你有一個可能為空的數組。你希望訪問數組的第1個、第2個或第n個元素,但如果該元素不存在,則獲取一個默認值。
通常你會使用數組的長度屬性:
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處的元素賦值。
當我開始使用React和后來的Redux時,我被迫編寫了一些涉及不可變性的代碼(這里的意思是保持原對象不變)。雖然一開始有些困難,但后來我看到了它的好處:更容易處理單向數據流。
不變性是指禁止改變對象。幸運的是,解構可以幫助你輕松地以不可變的方式實現某些操作。
解構與rest操作符(...)結合來刪除數組的第一個元素:
const numbers = [1, 2, 3];
const [, ...fooNumbers] = numbers;
fooNumbers; // => [2, 3]
numbers; // => [1, 2, 3]
[, ...fooNumbers] = numbers解構,創建了一個新的數組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' }
解構賦值與對象rest操作符相結合,創建一個新對象small,它包含了big對象中除foo屬性外的所有屬性。
在前面的小節中,對數組應用了解構。但是你可以對任何實現可迭代協議(iterable protocol)的對象進行解構。
許多原生基本類型和對象都是可迭代的:數組(arrays)、字符串(string)、類數組(typed arrays)、集合(set)和映射(map)。
例如,你可以把一個字符串解構成幾個字符:
const str = 'cheese';
const [firstChar = ''] = str;
firstChar; // => 'c'
你并不用局限于原生的類型,通過實現可迭代協議,可以定制解構邏輯。movies包含一個movie對象的列表。在解構movies時,將電影標題作為字符串來獲取是非常棒的。讓我們實現一個自定義迭代器:
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來實現可迭代協議。迭代器的方法:迭代電影的標題。
遵循迭代協議允許將movies對象解構為標題,獲取第一部電影標題的具體方法是:const [firstMovieTitle] = movies。
根據我的經驗,通過屬性對對象進行解構比數組解構更常見。對象的解構看起來很簡單:
const movie = { title: 'Heat' };
const { title } = movie;
title; // => 'Heat'
const {title} = movie創建一個變量title,并將屬性movie.title的值賦給它。
當我第一次讀到對象解構時,我有點驚訝于你不必靜態地知道屬性名,你可以使用動態屬性名稱來解構對象!
function greet(obj, nameProp) {
const { [nameProp]: name = 'Unknown' } = obj;
return `Hello, ${name}!`;
}
greet({ name: 'Batman' }, 'name'); // => 'Hello, Batman!'
greet({ }, 'name'); // => 'Hello, Unknown!'
greet()函數有兩個參數:對象和屬性名。在greet()函數內部,解構賦值const {[nameProp]: name = 'Unknown'} = obj使用中括號[nameProp]讀取動態屬性名,name變量作為別名接收動態屬性值。如果屬性不存在,你還可以給它賦一個默認值Unknown。
關于“JS解構的使用方法有哪些”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識,可以關注億速云行業資訊頻道,小編每天都會為大家更新不同的知識點。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。