es6的解構賦值學習(1)

  相對es5的簡單的「=」賦值來講,es6增長了一種新的賦值模式——解構賦值,按照它的規則,能夠從數組和對象中提取值來對變量進行賦值,我的以爲方便了不少,可是這個模式有點噁心人,相比簡單的「=」賦值來講,也更要花時間來理解,今天咱們一塊兒學習一下這個新的賦值方法。es6

  看一行代碼:數組

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

  這是一種最基本的數組解構賦值,等同於:學習

var a = 1;
var b = 2;
var c = 3;

  至關於兩邊都是數組,它們的length相同,左邊放變量,右邊放值,一一對應,省了很多代碼es5

  若是length不一樣的話,會有兩種狀況:spa

  

let [x, y] = [1, 2, 3];
//x=1
//y=2

let [a] = [];
//a=undefined;
let [a, b] = [1];
//a=1;
//b=undefined;

  第一種:左邊的length小於右邊的,叫作不徹底解構,變量均可以賦值成功,多餘的值就多餘了;code

  第二種:左邊的length大於右邊的,未超出的部分會正常解構並賦值,超出的變量在右邊沒有匹配的值,則解構失敗,值定位undefined;對象

  那若是兩邊的類型不一樣,舉個栗子:一邊是數組,另外一邊是非數組,則會報錯,借用阮大神的話:blog

// 報錯
let [foo] = 1;
let [foo] = false;
let [foo] = NaN;
let [foo] = undefined;
let [foo] = null;
let [foo] = {};

//上面的語句都會報錯,由於等號右邊的值,要麼轉爲對象之後不具有 
//Iterator 接口(前五個表達式),要麼自己就不具有 Iterator 接口(最後一
//個表達式)。

  es6中還有默認值的概念,解構賦值也容許指定默認值:接口

let [foo = true] = [];
foo // true

let [x, y = 'b'] = ['a']; // x='a', y='b'
let [x, y = 'b'] = ['a', undefined]; // x='a', y='b'

  咱們能夠看到,兩邊數組的length並不一樣,也沒有賦值,但能夠正常輸出,是由於在聲明變量時,給了變量一個默認值,若沒有用其餘方式給該變量賦值的話,則使用默認值,es6判斷使用默認值的狀況是給出了該位置的值爲undefined(未給任何值的話默認是undefined)且必須「===」undefined,纔會使用默認值:class

let [x = 1] = [undefined];
x // 1

let [x = 1] = [null];
x // null

  上面的代碼能夠這樣理解:

let x;
if ([undefined][0] === undefined) {
  x = 1;
} else {
  x = [undefined][0];
}


let x;
if ([null][0] === undefined) {
  x = 1;
} else {
  x = [null][0];
}

  而後在變量數量多的狀況下,能夠引用解構賦值的其餘變量,但該變量必須已經聲明,且有一個順序:後面的可使用前面的,反之不可:

let [x = 1, y = x] = [];     // x=1; y=1
let [x = 1, y = x] = [2];    // x=2; y=2
let [x = 1, y = x] = [1, 2]; // x=1; y=2
let [x = y, y = 1] = [];     // ReferenceError
let [x = y, y = 1] = [2];     // x=2,y=1

  今天就寫到這裏吧,數組的解構賦值也差很少了,但願能給你們一點幫助,之後我會邊學邊整理隨筆,你們一塊兒進步。(感謝阮一峯大神的經驗)

相關文章
相關標籤/搜索