ES6變量的解構賦值-ES6連載3

  • 基本用法
ES6 容許按照必定模式,從數組和對象中提取值,對變量進行賦值,這被稱爲解構(Destructuring)。
  • 關於給變量賦值,傳統的變量賦值是這樣的:
var arr = [100,200,300];//把數組的值分別賦給下面的變量;
var a = arr[0];
var b = arr[1];
var c = arr[2];

console.log(a);//a的值爲100
console.log(b);//b的值爲200
console.log(c);//c的值爲300

//將數組的元素值100,200,300分別賦值給變量a,b,c,結果也是如咱們所願,賦值成功,這是一種傳統的賦值方式。
  • 變量的解構賦值(ES6 容許寫成這樣的形式):
var [a,b,c] = [100,200,300]; //把數組的值分別賦給下面的變量;
console.log(a);//a的值爲100
console.log(b);//b的值爲200
console.log(c);//c的值爲300

//賦值的代碼大大減小了,不須要分別把變量a,b,c分別聲明定義和賦值,只須要將變量a,b,c做爲一個數組的元素,而後將數組[100,200,300]賦值給數組[a,b,c]便可,變量a,b,c便可分別獲得對應的值。

數組的解構賦值

  • 結構賦值能夠嵌套的
var [ a,b,[ c1,c2 ] ] = [ 100,200,[ 310,320 ] ];
console.log(c1);//結果:c1的值爲310
console.log(c2);//結果:c2的值爲320
  • 不徹底解構
var [a,b,c] = [100,200];
console.log(a);//結果:a的值爲100
console.log(b);//結果:b的值爲200
//當左邊的模式(你能夠理解爲格式)與右邊不徹底同樣的時候,那麼賦值過程當中,只會給模式匹配成功的部分的變量賦值
  • 賦值不成功,變量的值爲undefined
var [a,b,c] = [100,200];
console.log(a);//結果:a的值爲100
console.log(b);//結果:b的值爲200
console.log(c);//結果:c的值爲undefined
//解構不成功,變量的值就等於undefined
  • 容許設定默認值
var [a,b,c=300] = [100,200];
console.log(a);//結果:a的值爲100
console.log(b);//結果:b的值爲200
console.log(c);//結果:c的值爲300
//變量c已經指定默認值爲300,即便右側沒有與之對應的值賦給它也不要緊,它均可以成功賦值爲300,若是你想覆蓋默認值300,只需賦一個有效的值便可

var [a,b,c=3] =[100,200,400];
console.log(a);//結果:a的值爲100
console.log(b);//結果:b的值爲200
console.log(c);//結果:c的值爲400
//這個時候默認值3會被新的值400覆蓋,c的值爲400;注意:當新的值爲undefined的時候,是不會覆蓋默認值的。

對象的解構賦值

  • 對象的解構賦值跟數組的解構賦值很相似 
var { a,b,c} = {"a":1,"b":2,"c":3};
console.log(a);//結果:a的值爲1    
console.log(b);//結果:b的值爲2
console.log(c);//結果:c的值爲3
//跟數組的解構賦值很類似,只不過是數組換成了對象。可是二者有一個不一樣的地方

var { a,b,c } = {"a":1,"c":3,"b":2};
console.log(a);//結果:a的值爲1
console.log(b);//結果:b的值爲2
console.log(c);//結果:c的值爲3
//對象的解構賦值不會受到屬性的排列次序影響(數組則會受影響),它是跟屬性名關聯起來的,變量名要和屬性名一致,纔會成功賦值。
  • 若是變量找不到與其名字相同的屬性,就會賦值不成功
var { a } = {"b":2};
console.log(a);//結果:a的值爲undefine
  • 若是你想給一個變量名與屬性名不同的變量解構賦值\
var { b:a,} = {"b":2};
console.log(a);//結果:a的值爲2
//這樣變量a一樣能夠賦值成功,a的值最終爲2
  • 對象解構賦值也能夠嵌套
var {a:{b}} = {"a":{"b":1}};
console.log(b);//結果:b的值爲1
  • 能夠指定默認值
var {a,b=2} = {"a":1};
console.log(b);//結果:b的值爲默認值2

字符串的解構賦值

var [a,b,c,d,e] = "我是大帥哥";
console.log(a);//我
console.log(b);//是
console.log(c);//大
console.log(d);//帥
console.log(e);//哥
//這是由於在解構賦值的過程當中,字符串被轉換成了一個相似數組的對象。變量a,b,c,d,e都分別賦上了對應的值。

解構賦值的用途

  • 交換變量的值
//傳統作法最經常使用的是引入第三個變量來臨時存放
var x = 1;
var y = 2;
var z = x;//第三個變量臨時存放x的值
x = y;  //把y的值賦給x;
y = z;  //把z的值賦值給y;
console.log(x); //結果:x爲2
console.log(y); //結果:y爲1

//解構賦值,想交換兩個變量的值就簡單多了
var x = 1;
var y = 2;
[x,y] = [y,x];
  • 提取函數返回的多個值
//函數只能返回一個值,咱們能夠將多個值裝在一個數組或者對象中,再用解構賦值快速提取其中的值。
function demo(){
  return {"name":"張三","age":21}
}
var {name,age} = demo();
console.log(name);//結果:張三
console.log(age);//結果:21
  • 定義函數參數
function demo({a,b,c}){
  console.log("姓名:"+ a);
  console.log("身高:"+ b);
  console.log("體重:"+ c);
}
demo({a:"張三",b:"1.72m",c:"50kg",d:"8000"});
//經過這種寫法, 很方便就能提取JSON對象中想要的參數,例如案例中,咱們只須要獲取實參中的:a,b,c,而不須要關其餘的參數,好比:d或者其餘更多的參數。
  • 函數參數的默認值
//傳統的參數默認值的實現方式是,先判斷該參數是否爲undefined,若是是表明沒傳,須要手動給它賦一個值
function demo(a){
  var name;
  if(a === undefined){//判斷參數書否是否傳值
    name= "張三"; //沒傳,賦默認值
  }else{
    name= a;
  }
  console.log(name);
}

//可是有了解構賦值,一切都變得簡單不少!

function demo({name="張三"}){
  console.log("姓名:"+name);//結果:姓名:張三
}
demo({});

//經過解構賦值設定函數參數的默認值,簡潔地代碼便可實現。函數調用的時候沒有傳入對應的name參數,此時name就會使用默認值:「張三」
相關文章
相關標籤/搜索