什麼是解構賦值?這裡的關鍵字還是賦值,這是說如何去賦值的問題,這裡說的解構可以理解為解散重新構造,所以解構賦值可以理解為解散重新構造後進行賦值,通常是左邊一種結構,右邊一種結構,左右的結構拆開來一一對應進行賦值,例如:
let a, b
[a, b] = [1, 2]
console.log(a, b)
這裡就相當於把1賦值給a,把2賦值給b,這樣的操作就叫做解構賦值,從本質上來說,結構解構賦值是一種匹配模式,只要等號兩邊的模式相同,那麼左邊的變數就可以被賦值給右邊對應的值
為什麼要使用解構賦值?在沒有解構賦值的時候,多個賦值會比較麻煩,為了書寫更加方便,加入解構賦值是非常有必要的,例如:沒有解構賦值的時候,互動兩個變數的值,我們是這樣做的
let a = 10;
let b = 20;
let temp = a;
a = b;
b = temp;
console.log(a, b);
有了解構賦值以後,我們的**可以這樣寫:
let a = 10;
let b = 20;
[a, b] = [b, a];
console.log(a, b);
左右兩邊是陣列這種結構,我們稱為陣列的解構賦值,這樣也是非常常用的一種形式
注意1: 解構不成功,值為undefined
let [a, b] = [10]
console.log(a, b) // 10, undefined
注意2: 解構的時候可以設定預設值
let [a, b=20] = [10]
console.log(a, b) // 10 20
注意3: 值比變數多的情況可以使用"..."符號
let [a, b, ...rest] = [1, 2, 3, 4, 5, 6]
console.log(a,b,rest)
//rest元素必須放在最後,下面這種寫法會報錯
let [a, b, ...rest, c] = [1, 2, 3, 4, 5, 6]
如果等號左右兩邊是物件的結構,我們稱之為物件的解構賦值,也是非常常用的形式
let =
console.log(a, b)
注意1: 物件的解構賦值和陣列不同,陣列的賦值是以位置為對應關係進行賦值的,必須按順序來寫,而物件的賦值是以屬性名為對應關係的,因此,不用考慮順序,其內部的機制就是,先找到同名的屬性,再把右邊的值賦值給左邊的變數
注意2: 如果左邊的()屬性名和變數名一樣,那麼可以簡寫成下面的形式
// let =
//上面這種寫法和下面的寫法是等價的
let =
console.log(a, b)
//如果屬性名和變數名是不同的,那必須寫完整,例如下面這種寫法
let =
// 這裡的機制是 根據x的對應關係 把1賦值給m 根據y的對應關係,把2賦值給n
注意3: 物件的解構賦值也可以設定預設值
let =
console.log(a, b) //1, 20
// 陣列的解構賦值巢狀
let [a, [b, c],d] = [1, [2, 3], 4]
console.log(a, b, c, d)
// 物件的解構賦值巢狀
let obj =
]};let ] } = obj;
//p=['hello', ] x='hello' y = 'world'
1.變數交換
let a = 10;
let b = 20;
[a, b] = [b, a];
console.log(a, b);
2.函式返回多個值
function fn()
let [a, b, c] = fn();
3.引數定義
// 引數是一組有次序的值
function f([x, y, z])
f([1, 2, 3]);
// 引數是一組無次序的值
function f()
f();
4.提取json資料
let jsondata = ;
let = jsondata;
console.log(id, status, number);
// 42, "ok", [867, 5309]
es6 最佳入門實踐 6
symbol是es6中一種新增加的資料型別,它表示獨一無二的值。es5中我們把資料型別分為基本資料型別 字串 數字 布林 undefined null 和引用資料型別 object 在es6中新增的symbol資料型別劃分到基本資料型別 為什麼會有這樣一種資料型別呢?別人給了你乙個定義好的物件 va...
es6 最佳入門實踐 12
在es5中,物件導向我們通常寫成這樣 function person name,age person.prototype.showname function let p new person xiaoqiang 10 p.showname 上面這種寫法與傳統的物件導向寫法有很大的不同,讓學習過其他物...
es6 最佳入門實踐 10
generator函式是es6提供的一種非同步程式設計解決方案。在它的內部封裝了多個狀態,因此,又可以理解為一種狀態機,執行generator函式後返回乙個迭代器物件,使用這個迭代器物件可以遍歷出generator函式內部的狀態 generator函式和傳統函式的不同點有 1 函式定義的時候,fun...