4.1 数组的解构赋值
- 解析某一数据的结构,将我们想要的东西提取出来,赋值给变量或常量
const [a,b,c] = [1,2,3];
console.log(a,b,c);
4.2 数组的解构赋值的原理
-
- 模式(结构)
[] = [1,2,3]
-
- 索引值相同的完成赋值
[a,b,c] = [1,2,3]
const [a,[,,d],e] = [1,[2,4,5],3]
console.log(a,d,e);
4.3 数组解构赋值的默认值
const [a,b] = []
console.log(a,b);
const [a = 1,b = 2] = [];
console.log(a,b);
-
- 默认值的生效条件
- 只有当一个数组成员严格等于(===)undefined时,对应的默认值才会生效
const [a = 1,b = 2] = [3,0]
const [a = 1,b = 2] = [3,null]
const [a = 1,b = 2] = [3]
console.log(a,b);
-
- 默认值表达式
- 如果默认值是表达式,默认值表达式是惰性求值
const func = () => {
console.log('我被执行了');
return 2;
}
const [x = func()] = [1];
console.log(x);
4.4 数组解构赋值的应用
function func() {
const [a,b] = arguments
console.log(a,b);
}
func(1,2)
const [p1,p2,p3] = document.querySelectorAll("p")
console.log(p1,p2,p3);
const array = [1,1];
const add = ([x,y]) => x + y;
console.log(add(array));
let x = 1;
let y = 2;
[x,y] = [y,x]
console.log(x,y);
5.1 对象的解构赋值
const {username:username,age:age} = {username:'Alex',age:18}
console.log(age,username);
const {age:age,username:uname} = {username:'Alex',age:18};
console.log(age,uname);
5.2 对象解构赋值的注意事项
-
- 默认值的生效条件
- 对象的属性值严格等于undefined时,对应的默认值才会生效
const {username='ZhangSan',age = 0} = {username:'alex'};
console.log(username,age);
-
- 将一个已经声明的变量用于解构赋值
- 如果将一个已经声明的变量用于对象的解构赋值,整个赋值需在圆括号中进行
let x = 2;
({x} = {x:1})
console.log(x);
const {toString}={};
console.log(toString);
5.3 对象解构赋值的应用
const logPersoninfo = ({username,age}) => console.log(username,age);
logPersoninfo({username:'alex',age:18})
const obj = {
x:1,
y:[2,3,4],
z:{
a:5,
b:6
}
}
const {
y,
z,
z:{b},
y:[,yy]
} = obj
console.log(y,yy,z,b);
5.4 其他数据类型的解构赋值
- 数组的形式解构字符串
const [a,b,c,d,e] = 'hello';
console.log(a,b,c,d,e);
- 对象的形式解构字符串(按照索引/长度)
const {0:a} = 'hello'
console.log(a);
- 数值和布尔值的解构赋值(先将等号右边的值转为对象)
const {a = 2,toString} = 123;
console.log(a,toString);
const {a = 2,toString} = true;
console.log(a,toString);
- undefined和null的解构赋值
- 由于undefined和null无法转为对象,所以对他们进行解构赋值,都会报错
const {toString} = undefined
const {toString} = null