更加便利的從匿名物件或者陣列中,對變數進行賦值;
基本樣式,右邊資料型別必須是可迭代的型別。
let a = 1,
b = 2,
c = 3;
//等價於
//let [a, b, c] = [1, 2, 3];
對於let [a, b, c] = [1, 2, 3];
就是按照[, , ,]這樣的模式一一對abc進行賦值
對於陣列型別的模式匹配取值還算簡單的,比較容易
設定預設值
用來對不匹配成功的變數賦初始值
let [a = 123] = ; //a = 123
let [c, d = 123] = [1] //d = 123
let [b = 123] = [1]; //a = 1
上面例子說明一點:匹配成功時,不使用預設值,不成功或者值為undefined時使用預設值
let [d = c] = [1]; //d = 1
let [d = c] = ; //報錯
上面例子說明兩點:1.不能使用未宣告的變數進行預設值設定,2.在匹配成功時,引擎是不管它的,要不然就報錯了
個人理解認為,物件解構賦值時,key的模式匹配,對value變數的賦值,其右邊物件,可以不是迭代型別(個人猜測,有待商榷)
基本樣式:
let = ; //a = 1;
let = ; //c = 1;
實際上它是let = ;
key的a是模式匹配,value的a是變數,用於成功後的賦值};
對於這樣想要分別取1,,1這3個值,怎麼寫匹配模式
let } = }; //最簡單繁瑣的
可以簡化一下let } = };
,
同理let ]} = ]};
規則允許左邊不存放任何變數名,也就是為空物件,沒有意義但又是合法的表示式
({} = [true, false]);
({} = 'abc');
({} = );
非變數宣告的解構必需用括號括起來,不然會報錯,如上是表示式,括起來就不會報錯
let = "zxc";
let = "qwe";
console.log(b === string.prototype.tostring);
將"zxc" => new string("zxc"),再將其解構
function move( = {})
move(); //[3, 0]
move(); //[0, 0]
這個引數解構有兩個作用:1.x,y的預設值為0,0;2.move()引數預設值為{},所以當未輸入時傳入的實參為{}
不用於下面的
function move( = )
move() //[3, undefined]
move(); //[0, 0]
上面例子並沒有對x,y進行預設值的設定,只是對move(),傳入實參進行了的預設值設定
個人理解:從類似陣列或者物件的數值集合中快速提取自己想要的值
有趣的應用就是數值之間的交換
let a = 1,
b = 2;
[a, b] = [b, a];
console.log(a,b);
因為陣列的解構必須按順序來,不像物件的解構,按key模式匹配
其他應用有待自己對解構更加靈活的應用
ECMAScript 6入門類繼承筆記
看類繼承前,先回顧建構函式怎麼實現物件的繼承的 function f function son function inherit s,f inherit son,f let son new son 它實現了哪幾個功能 用來extends和super關鍵字,看乙個簡單的繼承 class a class...
EcmaScript 6 箭頭函式
es5 var total values.reduce function a,b 0 es6 var total values.reduce a,b a b,0 箭頭即乙個函式的簡化 es5 confetti btn click function event es6 confetti btn cli...
ECMAScript6 入門 物件的擴充套件
物件的擴充套件 1 屬性的簡潔表示 也就是說當物件的屬性和值同名時,可以縮寫為乙個 const foo bar const baz baz 等同於const baz 方法簡寫 const o 等同於const o 2 屬性名表示式 可以使用表示式定義物件的key 已知定義物件的屬性方法 方法一 ob...