何为解构赋值?
ES6中允许从对象和数组按照一定模式进行提取值,然后对变量进行赋值,这种操作就叫解构赋值。
- 数组的解构赋值:
示例1.1:
//ES6之前的变量赋值写法
let a = 1;
let b = 2;
let c = 3;
//ES6利用解构赋值写法:
let [a,b,c] = [1,2,3];
上面简单的示例可以看到等号左右两边模式是相等的,也就是说左右两边都必须是数组类型,这样左边的变量a,b,c三个变量就会被赋予相应的值!
示例1.2
//省略赋值
let [,,m] = [1,2,3];
console.log(m)
//输出结果是m=3
//不定参数赋值
let [y1,y2,y3] = [1,2,3,4,5];
console.log(y1,y2,y3);
//输出结果是y1=1; y2=2; y3=[3,4,5];
从示例1.2可以看出数组结构赋值还包括了省略赋值和不定参数赋值,但是不管形式如何变化,有一点要注意:那就是等号两边必须都是数组形式!如果等号右边不是数组类型,那么运行代码会报错!
示例1.3
let [a = 1] = [ ];
console.log(a); //输出结果是a=1;
let [x=1,y=2] = []; //输出结果是:x=1,y=2
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
从上面的示例1.3可以看到,解构赋值中允许使用默认值。而且默认值还可以引用解构赋值的其他变量,但是一定要注意,引用变量时候变量一定要提前声明。否则会报错,如示例最后一个表达式!
- 对象的解构赋值:
同理,解构赋值也可以应用在对象上!
示例2.1
let obj={ name:"张三",age:18 };
let {name,age} = obj;
console.log(name,age);
//输出结果是:name="张三";age=18
let {age,name} = obj;
console.log(name,age);
//输出结果是:name="张三";age=18
从上面的示例2.1可以看到,通过对象obj给变量name和age赋值了。而且等号左边对象里面是没有次序的,但是要注意变量必须和属性名同名才能得到正确的值!