解构赋值就说照葫芦画瓢,右侧的数据是什么样的结构,左侧就是同样的结构,拿对应位置上的数据。
let arr = [1,2,3]
let [a,b,c] = arr
console.log(a,b,c);
1.经典利用解构交换 两个变量
ps:以前我们需要找一个第三方变量来进行交换
let a = 10
let b = 20;
let temp
temp = a
a = b
b = temp
现在我们只需要解构就欧克了
let a = 10
let b = 30;
[a,b] = [b,a] //注意:这行代码上面那一行必须尾部有; 或这行代码前面加;
console.log(a,b);
2.解构的其他情况
2.1变量多但是值少
let [a,b,c,d] = [5,77,88]
console.log(a,b,c,d);
结论:没有位置与之对应,声明变量,没有赋值,默认值undefined
2.2变量少,值很多
let [a,b,c] = [5,77,88,90,80]
console.log(a,b,c);
结论:按照对应位置去获取数据,多余数据就拿不到!
2.3配合使用剩余参数...
let [a,b,...c] = [5,77,88,90,80,40]
console.log(a,b,c);
2.4设定默认值
let [a,b,c=100] = [10,20]
console.log(a,b,c);
结论:上面说到如果参数多值少,那就没有值与之对应返回undefined,那我们就可以给他设置一个默认值,返回的就是默认的值,当有值与之对应的时候就返回解构的值
2.5按需解构
let [,,b] = [10,20,30]
console.log(b);
结论:不需要数据可以跳过忽略的!利用逗号来占位置
例:只拿2
let [,[,b]] = [10,[1,2,3],5]
console.log(b);
3.解构对象
过去:
// 需求:把每个数据取出来放在一个变量,打印下!
let obj = {
name: "李四",
age: 18
}
// 曾经
// let name = obj.name
// let age = obj.age
利用解构赋值,右边对象是{} 左侧结构赋值也是{}
1、我们同名name变量,获取是对象内部同名属性名name的属性值!不是数组,没有顺序!讲究是同名!
2、如果获取不存在属性名,没有解构成功,变量是undefined
let obj = {
name: "李四",
age: 18,
};
let {name,age} = obj
console.log(name,age);
3.1给属性名重命名
当我们两个对象中有同样的属性名,我们都需要对其进行解构那变量名就撞了需要给他们命其他名
let obj1 = {
name: "张三",
age: 18
}
let obj2 = {
name: "李四",
age: 23
}
let { name: a } = obj1 // 左侧找name属性名,把值给变量a上
let { name: b } = obj2
console.log(a, b);
例:拿到王五和10
let obj = {
list: {
name:"王五",
number:[10,20,30]
},
age:18
};
let {list:{name,number:[b]}} = obj
console.log(name,b);
4.解构字符串
把它当成数据
let string = "abcdefg"
let [x,y,z] = string
console.log(x,y,z);
//取长度 冲突的话起个别名
let {length:lens} = string
console.log(lens);