ES6 数组解构赋值
1.数组解构 let [a, b, c,d] = ["aa", "bb", 77,88]; alert(a) //弹出aa 可以用babel 解析看ES5的转换结果
嵌套数组解构 let [a,b,[c,d],e] =["aa",'bb',[33,44],55]; alert(c) //弹出33
空缺变量 let [a,b,,e] =["aa",'bb',[33,44],55]; //缺省可以以空格代替但是不能去掉占位的,
多余变量 let [a,b,,e,f] =["aa",'bb',[33,44],55]; alert(f); //弹出undefined 与变量f没有对应值,所以映射不过去
默认值 let [a,b,,e,f='hello'] =["aa",'bb',[33,44],55]; alert(f) //弹出给的默认值 但是 下面这种有值的情况给默认值是会被忽略的 let [a,b,,e,f='hello'] =["aa",'bb',[33,44],55,66]; alert(f) //弹出给的66
结合扩展运算使用
[a, b, ...c] = [1, 2, 3, 4, 5, 7];
console.log(a); // 1
console.log(b); // 2
console.log(c); //[ 3, 4, 5, 7 ]
2.对象解构 // let obj={uid:121,uname:'张三'}; //对象写法一 let obj=new Object(); //对象写法二 obj.uid=111; obj.uname='张三'; let {uid:id,uname:name}=obj; //顺序改变无影响 alert(name); //弹出张三 这个也是创建一个变量,然后去映射出它的值
小括号 let obj={uid:121,uname:'张三'}; let uid,uname; ({uid,uname} = obj); //必须有小括号,否则{}就会被解读为语句块 alert(uname);;
3.字符串解构 let[a, b, c, d] ="倚天屠龙";
console.log(a); //弹出 倚
4.函数参数解构 let obj=new Object(); obj.uid=111; obj.uname='张三'; function analysis({uid,uname}){ alert(uid); alert(uname); } analysis(obj); //把刚开始定义obj对象传进去,然后里面会自动分配好你对象的值,你只需在传参数(形参)的时候注意对象的个数(实参)即可
默认值传函数
const isRequired = () => { throw new Error("param is required"); }; const hello = (name = isRequired()) => { console.log(`hello ${name}`); }; // 抛出一个错误,因为参数没有传 hello(); // 没有问题 hello("hello");
运用的例子
函数传参 test({name,type})
只要你传过去的实参名字和形参一样 是可以不按照顺序的(前提用解构的方式传形参)