ES6允許按照一定模式癞志,從數(shù)組和對象中提取值啥么,對變量進行賦值登舞,這被稱為解構。解構賦值在實際開發(fā)中可以大量減少我們的代碼量悬荣,并且讓我們的程序結構更清晰菠秒。也許你還是不太明白,那先來一個最簡單的數(shù)組解構賦值來進行賦值隅熙。
數(shù)組的解構賦值:
簡單的數(shù)組解構:
以前稽煤,為變量賦值核芽,我們只能直接指定值。比如下面的代碼:
let a=0;
let b=1;
let c=2;
而現(xiàn)在我們可以用數(shù)組解構的方式來進行賦值酵熙。
letl [a,b,c]=[1,2,3];
上面的代碼表示轧简,可以從數(shù)組中提取值,按照位置的對象關系對變量賦值匾二。
數(shù)組模式和賦值模式統(tǒng)一:
可以簡單的理解為等號左邊和等號右邊的形式要統(tǒng)一哮独,如果不統(tǒng)一解構將失敗。
let [a,[b,c],d]=[1,[2,3],4];
如果等號兩邊形式不一樣察藐,很可能獲得undefined或者直接報錯皮璧。
解構的默認值:
解構賦值是允許你使用默認值的,先看一個最簡單的默認是的例子分飞。
let [foo = true] =[];
console.log(foo); //控制臺打印出true
上邊的例子數(shù)組中只有一個值悴务,可能你會多少有些疑惑,我們就來個多個值的數(shù)組譬猫,并給他一些默認值讯檐。
let [a,b="I love music"]=['我就喜歡聽音樂']
console.log(a+b); //控制臺顯示“我就喜歡聽音樂I love music”
現(xiàn)在我們對默認值有所了解,需要注意的是undefined和null的區(qū)別染服。
let [a,b="I love music"]=['我就喜歡聽音樂',undefined];
console.log(a+b); //控制臺顯示“我就喜歡聽音樂I love music”
undefined相當于什么都沒有别洪,b是默認值。
let [a,b="I love music"]=['我就喜歡聽音樂',null];
console.log(a+b); //控制臺顯示“我就喜歡聽音樂null”
null相當于有值柳刮,但值為null挖垛。所以b并沒有取默認值,而是解構成了null秉颗。
對象的解構賦值
解構不僅可以用于數(shù)組痢毒,還可以用于對象。
let {foo,bar} = {foo:'I love music',bar:'我就喜歡聽音樂'};
console.log(foo+bar); //控制臺打印出了“I love music我就喜歡聽音樂”
注意:對象的解構與數(shù)組有一個重要的不同站宗。數(shù)組的元素是按次序排列的闸准,變量的取值由它的位置決定益愈;而對象的屬性沒有次序梢灭,變量必須與屬性同名,才能取到正確的值蒸其。
圓括號的使用
如果在解構之前就定義了變量敏释,這時候你再解構會出現(xiàn)問題。下面是錯誤的代碼摸袁,編譯會報錯钥顽。
let foo;
{foo} ={foo:'I love music'};
console.log(foo);
要解決報錯,使程序正常靠汁,我們這時候只要在解構的語句外邊加一個圓括號就可以了蜂大。
let foo;
({foo} ={foo:'I love music'});
console.log(foo); //控制臺輸出I love music
字符串解構
字符串也可以解構闽铐,這是因為,此時字符串被轉換成了一個類似數(shù)組的對象奶浦。
const [a,b,c,d,e,f]="I love music";
console.log(a);
console.log(b);
console.log(c);
console.log(d);
console.log(e);
console.log(f);
console.log(g);
console.log(h);
console.log(i);
console.log(j);
console.log(k);
console.log(l);