不完全解构,有2种情况,1种是解构的时候变量中出现undefined。只要出现undefined,这个属于解构不成功。
2种是解构的时候变量中没有出现过undefined。这个属于解构成功。
1.不完全解构(解构不成功)
- // 1.不完全解构(解构不成功)
- // 你没有向b这个变量中,去解构任何值,放置进去
- let [a,b]=[1];
- console.group('不完全解构(解构不成功)');
- console.log('a的值是:'+a);
- console.log('b的值是:'+b);
console输出效果
如果解构不成功,变量的值就等于undefined。
- // 解构默认值
- // 在解构数组中数据的时候, 我们在左侧变量中 给其指定一个默认值,目的以防止右侧区域有undefined
- let[foo=true]= [];
- console.group('解构默认值');
- console.log(foo);
console输出效果
以上两种情况都属于解构不成功,foo的值都会等于undefined。
2.不完全解构(解构成功)
另一种情况是不完全解构,即等号左边的模式,只匹配一部分的等号右边的数组。这种情况下,解构依然可以成功。
- // 2.不完全解构(解构成功)
- let [x,y]= [1,2,3];
- console.group('不完全解构(解构不成功)');
- console.log('x的值是:'+x);
- console.log('y的值是:'+y);
console输出效果
上面两个例子,都属于不完全解构,但是可以成功。
如果等号的右边不是数组(或者严格地说,不是可遍历的结构),那么将会报错。
// 报错
let [foo] = 1;
let [foo] = false;
let [foo] = NaN;
let [foo] = undefined;
let [foo] = null;
let [foo] = {};
上面的语句都会报错,因为等号右边的值,要么转为对象以后不具备 Iterator 接口(前五个表达式),要么本身就不具备 Iterator 接口(最后一个表达式)。
也可以只取数组中部分值赋值给变量
- {
- let[,,a] = [1,2,3,4];
- console.log(a);
- }
console输出效果
剩余运算符
剩余运算符 在数组解构赋值中的使用
剩余运算符 特点 :在变量名的前面有三个小点,例如...b
- // ...剩余运算符 在数组结构赋值中使用
- // ...b 将数组中 的剩余部分·,存放在b这个变量中
- let [a,...b]= [1,2,3];
- console.group('剩余运算符 在数组结构赋值中使用');
- console.log(a);
- console.log(b);
console输出效果