什么是變量的解構(gòu)(Destructuring)賦值?
ES6 允許按照一定模式,從數(shù)組和對象中提取值,對變量進行賦值,這被稱為解構(gòu)
只要等號兩邊的模式相同,左邊的變量就會被賦予對應(yīng)的值
- 數(shù)組解構(gòu)賦值
let [m,n]=[9,4];
console.log(m,n); // m 9; n 4
- 對象解構(gòu)賦值(對象的結(jié)構(gòu)賦值,與順序無關(guān)因為變量必須與屬性同名,才能取到正確的值)
let {p,q}={q:"hello",p:"hi"};
console.log(p,q); //hi hello
注:
1.如果解構(gòu)不成功,變量的值就等于undefined
let {p} = {q: 'a'};
p // undefined
2.解構(gòu)也可以用于嵌套結(jié)構(gòu)的對象
let [a, [b], c] = [1, [2], 3]; //a=1 ; b=2; c=3;
3.如果要將一個已經(jīng)聲明的變量用于解構(gòu)賦值,要在 {} 外加上 () 否則JavaScript引擎會將 {p} 理解成一個代碼塊
let p;
({p} = {p: 8});
但是在有些情況下是不能使用圓括號的:
1.變量聲明語句中,不能帶有圓括號
2.函數(shù)參數(shù)中,模式不能帶有圓括號
3.賦值語句中,不能將整個模式,或嵌套模式中的一層,放在圓括號之中
所以可以使用 () 的情況只有一種 —— 賦值語句的非模式部分,可以使用圓括號
用途
<1> 交換兩個變量的值
let a=1,b=2;
[a,b]=[b,a]; //a=2 b=1
<2>從函數(shù)返回多個值
一般要返回多個值的話,我們只能用數(shù)組存值,然后輸出,有了解構(gòu)賦值就可以提取出多個值
function fun() {
return [1, 2, 3];
}
let [a, b, c] = fun();
console.log(a,b,c); // 輸出1 2 3