一、解构赋值的定义
简单的理解就是赋值=号左右两侧具有相同的结构,来进行一一对应的赋值的语句
二、解构赋值的分类
数组解构赋值 对象解构赋值 字符串解构赋值 布尔值解构赋值 函数参数解构赋值 数值解构赋值 (重点理解前两个就可以了)
三、对于每个分类单独解释
1、数组解构赋值(下面进行代码展示,并添加必要的注释便于理解)
{ let a,b,rest; [a,b]=[1,2]; console.log(a,b);//输出1,2 直接将1和2解构到a和b}
也可以对变量设置默认值例如下面代码的c 就是默认为3 如果解构例如[a,b,c]=[1,2] 没有对c进行解构 则c为undefined
{ let a,b,c,rest; [a,b,c=3]=[1,2]; console.log(a,b);}
使用场景1
①、变量交换
{ let a=1; let b=2; [a,b]=[b,a]; console.log(a,b);}
②、对函数返回值直接提取(没有解构赋值 需要先取出结果 然后通过索引来进行取出)
{ function f(){ return [1,2] } let a,b; [a,b]=f(); console.log(a,b);}
③、只取出返回结果的某些需要的值
{ function f(){ return [1,2,3,4,5] } let a,b,c; [a,,,b]=f(); console.log(a,b); // 输出1 4}
④、不关心数组的内容长度
{ function f(){ return [1,2,3,4,5] } let a,b,c; [a,...b]=f(); console.log(a,b);//输出1,[2,3,4,5]}
2、对象解构赋值
{ let o={p:42,q:true}; let {p,q}=o; console.log(p,q);}
对象解构赋值设置默认值
{ let {a=10,b=5}={a:3}; console.log(a,b);//输出3 5}
稍微复杂的对象的解构赋值
{ let metaData={ title:'abc', test:[{ title:'test', desc:'description' }] } let {title:esTitle,test:[{title:cnTitle}]}=metaData; console.log(esTitle,cnTitle);//abc test (相当于esTitle和cnTitle分别对应metaData里面的abc和test)}