数组的解构赋值
基本用法
let a = 1;
let b = 2;
let c = 3;
//上面为解构前代码,下面为解构后
let [a,b,c]=[1,2,3];
1、解构赋值属于“模式匹配”,只要等号两边的模式相同,左边的变量就会被赋予对应的值。
2、只要某种数据接口具有Iterator(迭代器)接口,都可以采用数组形式的解构赋值
3、如果解构不成功,变量的值就等于undefined。
示例:
let [a,b,c]=[1,2,3]; //a=1;b=2;c=3
let [b, f] = [1]; //b = 1; f = undefined;
let [x, , y] = [1, 2, 3]; //x=1;y=3;
let [x] = []; //x = undefined;
let [, , z] = ["faa", "aaa", "baz"]; //z="baz"
let [x, y, ...z] = ['a']; //x= 'a';y=undefined;z=[];
let [x, ...y] = [1, 2, 3, 4]; //x=1;y=[2,3,4];
没有变量接收的解构值会被忽略掉。如下:
let [a, [b], d] = [1, [2, 3], 4];//a=1;b=2;d=4;因为b后面没有变量所以3被忽略
赋值不是数组则会报错
let [foo] = 1;//右边的1不在数组里,报错
默认值
解构赋值允许指定默认值。
let [foo = true] = [];//foo=true;
let [x, y = 'b'] = ['a'];//x='a';y='b';
let [m, n = 'b'] = ['a', undefined];//m='a';n='b';
如果默认值是一个表达式,会采用惰性求值,只有在用到时才会求值。
function f() {
console.log("afcaf");
return 55;
}
let [x = f()] = [1];//x=1;
默认值可以引用解构赋值的其他变量,但改变量必须已经声明,否则会报错。
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] = [];x=1;y=1;
对象的解构赋值与数组的区别
数组的元素是按次序排列的,变量的取值是由它的位置决定。
对象的属性没有次序,变量必须与属性同名才能取到正确的值。
let { bar, foo } = { foo: "aaa", bar: "bbb" };//bar='bbb';foo='aaa';
let { bar } = { foo: "aaa", bar: "bbb" };//bar='bbb';