基本概念
變量的解構賦值本質上就是一種匹配模式,只要等號兩邊的的模式相同,左邊的變量就可以被賦予對應的值。
那么根據 javascript 的數據類型可分為:
1.數組的解構賦值。
2.對象的解構賦值。
3.基本類型的解構賦值。
首先我們來看看數組的解構賦值。
例1:
let [a,b,c] = [1,2,3]; //實際上和我們平時常用的let a=1,b=2,c=3;是一個意思。
例2:
let [a,[[b],c]] = [1,[[2],3]] //a=1,b=2,c=3
let [ , ,c] = [1,2,3]; //c=3;
let [y=1] = []; //y=1
let [y=1] = [2]; // y=2
以上例子我們不難看出數組的賦值就是要找準=號兩邊對應的位置。ps:[y=1]這種寫法是默認值,如果沒找到對應的值就取默認值。
對象的解構賦值。
例1:
let {a,b} = {a: 1,b: 2} //a=1,b=2
例2:
let {a: b} = {a:1} //console.log(a)會報錯,console.log(b)//1
以上例子可以看出對象的解構賦值是根據key值來的。只要找到相對應的key就可以賦值成功。
基本類型的解構賦值。
例1:
let [a,b,c,d] = '1234' ;
console.log(a,b,c,d) //1,2,3,4
let {length:len} = 'java' ;
console.log(len) // 4
let {toString: ts} = 1,{toString: bs} = true;
console.log(ts,bs) // function toString() { [native code] } function toString() { [native code] }
console.log(ts === Number.prototype.toString) // true
console.log(bs === Boolean.prototype.toString) //true
ts.call(1) // 字符串'1' ps:不能直接調用ts().需要指定this對象(number類型的)。直接調用this是指向window的。
以上例子可以看出基本類型的賦值數組的賦值就是index對應賦值,對象的賦值就是屬性調用后賦值。
注意: null和undefind不能被解構賦值!
以上都是個人理解如有不對之處還望指正交流!