什么是解构赋值:
左边一个结构,右边一个结构分别赋值 //解构:分解,结构,赋值
结构:数组结构和对象结构
解构:ES6允许按照一定模式从数组和对象中提取值,然后对变量进行赋值(这种方式相当于模式匹配,当两边模式相同时,左边配给右边)
解构赋值的分类:
数组结构赋值(重点)
对象结构赋值(重点)
字符串结构赋值
布尔值结构赋值
函数参数结构赋值(数组结构赋值在函数参数的作用)
数值结构赋值
块作用域:用{}括起来就形成一个块,因为let变量不能重复声明
小结:
1.当右边的没有被赋值时,没配对成功时,数据类型为undefined
2.用作变量交换,(因为可以不需要中间变量)
3.获取函数内部的值
4.对象结构赋值,左边必须是一个对象,右边也必须是一个对像
…扩展运算符,展开运算符
赋值过程:
undefined会触发默认值
只要不是undefined就不会触发默认值
先从右边向左边赋值,再来默认值,挨个赋值
数组是连续的,对象是不连续
对象的格式:
什么是模式相同,指的是两边数组,或对象类型相同
{
let a,b,rest;
//数组类型的结构
[a,b]=[1,2];
//相当于let a=1;b=3;
console.log(a,b);
}//结果为:1,2
{
let a,b,rest;
[a,b,…rest]=[1,2,3,4,5,6];
console.log(a,b,rest);
} //结果为1,2,【3,4,5,6】
//对象结构赋值,不是顺序的,按属性的名称进行赋值
{
let a,b;
({a,b}={a:1,b:2})
console.log(a,b);
}
//1,2
{
let a,b,c,rest;
[a,b,c]=[1,2];
//[a,b,c=3]=[1,2]
console.log(a,b,c);
}1,2,undefined
//用作值交换,而不需要一个中间变量
{
let a=1;
let b=3;
[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(); //a=1,b=4
//[a,…b]=f();//a=1,b=[2,3,4,5]
console.log(a,b);
}
//对象的结构赋值
{
let o ={p:42,q:ture}
let {p,q}=o;
console.log(p,q)
}42 true
//嵌套解构赋值
{
let {a=10,b=5}={a:3};
} 3,5
let metData={
ti:“njx”,
test:[{
ti:“test”,
desc:“ced”
}]
}
let {ti:esT,test:[{ti:cnt}]} = metData;
//njx test
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-tpYwlF0U-1618995788886)(C:\Users\97950\AppData\Roaming\Typora\typora-user-images\image-20210311172136411.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-wZQdMJZ1-1618995788893)(C:\Users\97950\AppData\Roaming\Typora\typora-user-images\image-20210311172315757.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-fM1WHI5J-1618995788897)(C:\Users\97950\AppData\Roaming\Typora\typora-user-images\image-20210311172914776.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-3mwHl1m1-1618995788903)(C:\Users\97950\AppData\Roaming\Typora\typora-user-images\image-20210316102611943.png)]
通过索引访问,其中0也可以用[]包起来
JSON.parse(json)将字符串转换为json格式