多种解构赋值
1.解构赋值对象
let {a,b}={a:1,b:2}
//a=1,b=2,//属性一致
let {a:c}={a:1,b:2}
//属性不一致,新的变量名
c=1,a=undefined
//对象的解构是没有次序的,也就是说,对象的解构赋值的内部机制,是先找到同名属性,然后再赋给对应的变量。真正被赋值的是后者,而不是前者。
2.解构赋值数组
//数组的解构是有次序的
let [,,c]=[1,2,3]
//c=3
let [a,...b]=[1,2,3,4];
//a=1;
//b=[2,3,4]
let [a,b,...c]=[1];
//a=1;
//b=undefined;如果解构不成功,变量的值就等于undefined。
//c=[];
不完全解构,即等号左边的模式,只匹配一部分的等号右边的数组。
let [x, y] = [1,2,3];
x// 1y// 2
let [a,[b], d] = [1,[2,3],4];
a// 1
b// 2
d // 4
3.解构赋值函参
var func=([x,y])=>console.debug(x,y);
func([1,2]);//1,2
func([1]);//1,undefined
func([]);//undefined,undefined
var func=({x,y:yy})=>{
console.debug(x,y,yy);
}
func({x:1,y=2});//1,undefined,2
func({y:2});//undefines,undefined,2
func({});//undefined,uindefined,undefined
//三个点(...) 有2个含义。ES6中扩展运算符(spread)和剩余运算符(rest)
4.rest参数(与。。。相反)===声明就是剩余运算符
5.。。。(与rest相反)转为用逗号分隔的参数序列。(对象和数组都适用)==调用直接使用就是扩展运算符
6.函数参数与剩余运算符
7.函数参数与扩展运算符()序列,数组,对象
let func=(a,b,c)=>console.debug(c);
var arr=[1,2,3]
func(...arr);
//3
let foo=(a,...b)=>console.debug(a,b);
foo(...arr);
//1,[2,3]