一、在es5中咱们进行相关赋值的时候,只能一个一个进行赋值,使用逗号的进行赋值也只是最右边的赋值 才生效。在es6中出现了赋值解构,分两种状况一个是数组解构,一个是对象解构赋值。这么好用的方法给我带来不少便利。python
1 // //解构赋值:经过数组对应,对变量进行对应赋值。 2 let [a,c,v,b]=[1,2,3,4]; 3 console.log(a,c,v,b); 4 //这种赋值叫作 模式匹配。只要等号两边结构同样就能够进行赋值。 5 let [k,[[n],d]]=[1,[[2],3]]; 6 console.log(k,n,d); 7 //若是解构不成功,对应变量值为undefined; 8 let [l,m]=[1]; 9 console.log(m); 10 //不彻底解构,若是等号左边没有所有匹配右边也是能够结构成功的。 11 let [vv,vb,vc]=[1,2,3,4]; 12 console.log(vv,vb,vc); 13 //变量结构须要等号右边须要itrator结构,也就是说具有能够被迭代。不然解构不成功。 14 try { 15 // let [cc]=2;//右边并非数组 TypeError: 2 is not iterable 16 let [dd]={};//不具有iteraor 因此解构也不成功。TypeError: {} is not iterable 17 }catch (e) { 18 console.log(e) 19 }
1 // 解构容许有默认值。 2 let [a1,a2=2]=[1]; 3 console.log(a1,a2); 4 // 须要注意的是在es6内部使用的是严格相等来判断一个位置是否有值。只有当数组中的成员严格等于undefined 默认值才能生效。 5 // 若是默认值里是null,由于null不严格等于undefined 全部默认值也不会生效。 6 let [a=2]=[null]; 7 console.log(a);//a=null 8 // 若是默认值是表达式,这个表达式是惰性求值。只有用到的时候才会求值。 9 fn=()=>{ 10 return 2; 11 }; 12 13 let [a=fn()]=[1]; 14 console.log(a); 15 //只有a对应的右边的位置的值为undefined的时候,才会执行fn,不然不会执行至关于: 16 let x; 17 x=[1][0]===undefined?fn():[1][0];//只有在对应的右边的元素为undefined的时候才会计算表达式。和函数的默认为表达式也是惰性求值。
1 // 默认值也能够是其余结构解构的变量,可是对应的变量须要提早声明,不然会报错。 2 try { 3 let [ov,oc=ov]=[1]; 4 console.log(ov,oc); 5 let [k1=k2,k2]=[undefined,2]; 6 console.log(k1,k2);//ReferenceError: Cannot access 'k2' before initialization 7 }catch (e) { 8 console.log(e) 9 }
1 //对象解构:对象解构不须要位置和数组解构位置一致,只要保证解构的变量名和属性一致便可。 2 let {a,c}={c:4,a:2}; 3 console.log(a,c); 4 //若是解构失败,变量赋值为undefined. 5 let {acd}={f:2}; 6 console.log(acd);
1 // 咱们在使用对象解构的时候,能够获取对应的对象的方法相似有点想python的反射 2 let {log}=console; 3 log(222); 4 //对象解构 上面的例子都是简写形式。其实是以下://也就是说:a是匹配的关键字 而真正的白能量是c. 5 let {a:c}={a:2,c:4}; 6 console.log(c)
//在解构的时候,咱们也能够用在解构中嵌套解构对象,也就是说能够在对象解构中嵌套数组解构 这种状况嵌套对象的属性不能省略匹配的同名属性。 let {ac:ac,ff:[c,a]}={ac:22,ff:[1,2]}; console.log(ac,c,a);