数组的解构赋值
- 基本用法 模式匹配,只要等式的两边的模式相同,左边的变量就会被赋予相应的值。
//ES5
var a = 1;
var b = 2;
var c = 3;
//ES6
var [a,b,c] = [1,2,3];
let [foo,[[bar],baz]] = [1,[[2],3]]; // foo = 1,bar = 2, baz = 3
let [ , , third] = ['foo','bar','baz']; // third = 'baz'
let [x, , y] = [1,2,3] // x = 1,y=3
let [head,...tail] = [1,2,3,4]; // head = 1, tail = [2,3,4]
- 解构不成功,就是undefined
let [x,y,...z] = ['a']; // x = 'a',y => undefined , z = []
- 不完全解构
let [x,y] = [1,2,3]; // x = 1, y = 2
let [a,[b],d] = [1,[2,3],4]; // a = 1, b = 2, d = 4
- 如果等号的右边不是数组(不是可遍历的结果)那么将会报错。
let [foo] = 1;
let [foo] = false;
let [foo] = NaN,undefined,null,{},
- 数据结构具有iterator接口,都可以采用数组形式的解构赋值
let [x,y,z] = new Set(['a','b','c']); // x = 'a', y = 'b', z = 'c'
- 解构赋值允许默认值
var [foo = true] = []; // foo = true
let [x,y='b'] = ['a']; // x = 'a', y = 'b'
let [x,y='b'] = ['a',undefined]; // x = 'a', y = 'b'
let [x=1]=[null] // x=null
ES6内部使用严格相等运算符(===)判断一个位置是否有值,如果一个数组成员是null,默认值就不会生效,因为null不严格等于undefined
7.如果默认值是一个表达式,那么表达式是惰性求值的,即只有在用到的时候才会求值。
function f(){
console.log('aaa')
}
let [x=f()]=[1];
//因为x能取到值,所有f根本不会执行
8.默认值可以引用解构赋值的其他变量,但是该变量必须已经声明了
let [x=1,y=x] = []; //x=1;y=1;
let [x=y,y=1]=[]; // 报错
网友评论