---恢復內容開始---
從按照一定的模式從象或陣列中提取值,然後對變數進行賦值就是解構
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重點 不是只有陣列才可以解構...