ECMA Script 6新特性之解构赋值

1.基本概念用法

 1.1解构赋值:ES6允许按照一定模式,从数组和对象中提取值,对变量进行赋值。  

var a = 1;
var b = 2;
var c = 3;
/*上述赋值语句用解构赋值为*/
var [a,b,c] = [1,2,3];

 1.2上述的解构发生在等号左右模式相同的情况下,如果等号两边的模式不一致,解构可能会不成功;

/*当变量多于值个数或无值时,解构失败*/
var [foo] = [];   
var [a,b] = [1];
/*当变量少于值个数,不完全解构*/
let [a,b] = [1,2,3];   //可解构,a = 1, b = 2
let [a,[b],c] = [1,[2,3],4] //可解构,a = 1, b = 2,c=4
/*等号右边不是数组时,报错,下述代码全部都会报错*/
let [foo] = 10;
let [foo] = true;
let [foo] = null;
let [foo] = {};

 1.3解构赋值可指定默认值:

var [foo = true] = [];  //foo = true;
var [a,b = 2] = [1];    //a = 1;b = 2;

 另需注意,指定默认值的数组成员必须是严格等于undefined,否则默认值不会生效;

/**/
var [x = 1] = [undefined];  //x =1
var [x = 1] = [null];           //x=null
var [x ,y= 1]= [2];             //y = 1

如果默认值是一个表达式,那么这个表达式是惰性求值的,即只有在用到的时候,才会求值;

function f() {
  console.log('aaa');
}

let [x = f()] = [1];
/*上述代码中因为x能取到值,因此f()函数不会执行*/

默认值可以引用解构赋值的其他变量,但该变量必须已经声明;

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

/*最后一个赋值,x用到默认值y时,y还没有声明。因此报错*/

 

posted @ 2018-07-24 16:06  Java_Panda  阅读(285)  评论(0编辑  收藏  举报