先上一段代码,
{ function move({x: t = 0, y = 0, z = 3} = ‘111‘) { return [x="x",t, y, 9, z]; } console.log(move({x: 3, y: 8, z: 5})); // ["x",3, 8, 9, 5] console.log(move({x: 3})); // ["x",3, 0, 9 ,3] console.log(move({})); // ["x",0, 0, 9, 3] console.log(move()); // ["x",0, 0, 9 ,3] let [a, ...b] = move({x: 4}); console.log(a);//x console.log(b);//[4,0,9,3]}
如果能弄懂这个代码,基本了解到解构的精髓了。知识点1:数组的解构下标取值let [a,b]=[3,4];//a=3,b=4等价于let c=[3,4];let a=c[0];let b=c[1]; 赋默认值let [a=1,b]=[,4];//a=1,b=4等价于let c=[undefined,4];let a,b=c[1];if(c[0]===undefined){ a=1;}注意:let [a=1,b]=[null,4];//a=null,b=4,只有c[0]为undefined未定义才赋默认值。 其他let [a,...b]=[1,2,3,4];//a:1,b:[2,3,4]let [a,,b]=[1,2,3];//a:1,b:3let [a,[b],c]=[1,[2,3],4];//a:1,b:2,c:4
报错let [a]=1;//报错let [a]=false;//报错let [a]=NaN;//报错let [a]=undefined;//报错let [a]=null;//报错let [a]={};//报错 对象解构let {a,b}={a:1,b:2};//a=1,b=2相当于let c={a:1,b:2};let a=c.a;let b=c.b;另let {b,a}={a:1,b:2};//a=1,b=2,没有排序要求 let {a:t,b}={a:1,b:2};//t=1,b=2相当于let c={a:1,b:2};let t=c.a;let b=c.b;*a为匹配模式,t为变量名称. let {a:{b:{c},d:h,b},g:t}={a:{b:{c:1},d:2},f:3,g:4}//c=1,t=4,h=2,b={c:1};相当于let o={a:{b:{c:1},d:2},f:3,g:4};let c=o.a.b.c;let h=o.a.d;let b=o.a.b;let t=a.g; *多重嵌套,规则一样"冒号前为匹配模式,冒号后为变量名" let a;({a}={a:3});*必须加括号,因为每一行的首个字符如果为{,会被解析为块级作用域
let a={},b=[];({c:a.pro,d:b[0],e:b[1]=4}={c:2,d:3});//a={pro:2},b=[3,4];相当于let a={},b=[],f={c:2,d:3};a.pro=f.c;b[0]=f.d;b[1]=f.e;if(b[1]===undefined){ b[1]=4;} let {0:a,1:b}=[3,4]//a=3,b=4*数组是特殊的对象 分析文章开始的move函数
function move({x: t = 0, y = 0, z = 3} = ‘111‘) { return [x="x",t, y, 9, z];}等价于
function move(a){ if(a===undefined) a=‘111‘; let t=a.x, y=a.y, z=a.z, x; if(t===undefined) t=0; if(y===undefined) y=0; if(z===undefined) z=3; if(x===undefined) x=‘x‘; return [x,t,y,9,z]} 想要学习完整详细的es6解构知识点或es6技术,推荐阮一峰老师的es6教程。
时间: 2024-10-09 13:22:09