變數的解構賦值

2022-07-28 16:15:38 字數 1674 閱讀 3727

---恢復內容開始---

從按照一定的模式從象或陣列中提取值,然後對變數進行賦值就是解構

1.陣列的解構賦值

陣列的解構賦值本質上是模式匹配

左邊多,多出來即為undefined

let [a,b,c]=[1,2];

console.log(a, b, c);

//1,2,undefine

右邊多,則省略即可

let [a,b]=[1,2,3];

console.log(a, b);

//1,2

陣列的解構賦值可以巢狀,也可以有預設值,解構時,變數的取值由它們所在的位置決定

實際上只要陣列右邊的模式有iterator介面就可賦值

2.物件的解構賦值

物件解構時,因為物件的屬性沒有次序,所以值跟變數的次序不對應也行,但是變數必須與屬性同名才能取到值

實際上屬性只是作為匹配模式,真正被賦值的是屬性的值

左右兩邊數量不等的情形同陣列一樣,(但是左邊可以是個空物件,雖然這樣毫無意義,但是是合法的)

可以巢狀,可以有預設值

3.字串的解構賦值

字串被轉換成了乙個類似陣列的物件,類似陣列的物件都有乙個length屬性,可以進行進行解構賦值

let [a,b,c,d,e,f,g]="hello";

console.log(a, b, c, d,e);

//h e l l o

左右兩邊數量不等時如上所述

4.數值和布林值的解構賦值

解構賦值時,如果右邊為數值或者布林值,則先將其轉換為物件number和boolean

解構賦值的規則是,只要右邊的值不是陣列或物件,就先將其轉換為物件,由於undefined和null無法轉換為物件,所以對它們進行解構賦值會報錯

5.函式引數的解構賦值

function move( ={}) 

move(); //

[3, 8]

move(); //

[3, 0]

move({}); //

[0, 0]

move(); //

[0, 0]

function move( = ) 

move(); //

[3, 8]

move(); //

[3, undefined]

move({}); //

[undefined, undefined]

move(); //

[0, 0]

好好感受上面這兩個,差點被繞暈了,實際上跟前面物件的解構賦值一樣,再來乙個例子看看

function move(=)

a()//1,2

6.圓括號問題

6.1不能使用圓括號的情況

變數宣告語句

函式引數

賦值語句的模式

6.2可以使用圓括號的情況

賦值語句的非模式部分

7.用途

交換變數的值

從函式返回多個值

函式引數的定義

提取json 的資料

函式引數的預設值

遍歷map結構

輸入模組的指定方法

ps:我感覺最大的用處就在於提取東西

變數解構賦值

1.從陣列物件中提取值,對變數進行賦值,被稱為結構。2.false,1,nan undefind null轉化為物件後不具備iterator介面,本身不具備iterator介面。3.set結構也可使用陣列的解構賦值,只需要資料機構具備iterator 迭代器 介面,都可以採用陣列形式的解構賦值 ar...

變數的解構賦值

從陣列和物件中提取值,對變數進行賦值,這被稱為解構 本質上,這種寫法屬於 模式匹配 只要等號兩邊的模式相同,左邊的變數就會被賦予對應的值 例子 let a,b,c 1,2,3 let foo,bar baz 1,2 3 foo 1 bar 2 baz 3 let third foo bar baz ...

變數的解構賦值

什麼是解構 es6允許按照一定的模式,從陣列或者物件中提取值,然後賦值給相應變數,此為解構。解構分為完全解構和不完全解構,前者要求一一對應,後者可以是等號左邊只匹配等號右邊的一部分。解構不成功會返回undefined。let foo alert foo undefined重點 不是只有陣列才可以解構...