1. 访问对象属性
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Document</title>
<script>
var User = {
'name': 'aluoha',
'age': 25
};
console.log(User.name, User.age); // aluoha 25
</script>
</head>
<body>
</body>
</html>
1.1 使用解构来访问对象:同样也可以访问,这种方式就是解构
let { name, age } = User;
console.log( name, age ); // aluoha 25
1.2 解构出来的对象,需要与对象中的属性相同,不同的名字将无法实现效果:
let {
name1,
age1
} = User;
console.log(name1, age1); //undefined, undefined
1.3 小结:关于解构
1.3.1,右边是对象, 左边解构的语法,也是对象, {}
1.3.2,上面的name, age是局部变量
1.3.3,解构出来的变量 一定要是 对象中能够查找到的属性名
1.3.4,相当于把对象中的属性暴露出,成为一个新的不需要使用对象就能访问的变量
1.4 解构出来的变量,可以更改名称,改名之后,原先的名字就无法访问对象的属性了
<script>
var User = {
'name': 'aluoha',
'age': 25
};
let {
name: name1,
age: age1
} = User;
console.log(name1, age1); //aluoha 25
console.log(name, age); //报错
</script>
1.5.1 可以给解构过程增加变量
var User = {
'name': 'aluoha',
'age': 25
}; let {name,age,sex} = User;
//解构出来的属性,如果不存在,默认值为undefined
console.log(name, age, sex); //aluoha undefined
1.5.2 给解构增加的变量赋值
var User = {
'name': 'aluoha',
'age': 25
};
//解构出来的值 可以赋值 一个默认的值
let {name,age,sex = 'man'} = User;
console.log(name, age, sex); // aluoha 25 man
2. 数组解构:
2.1 部分解构
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Document</title>
<script>
let arr = [101, 201, 301, 401];
//数组用[]解构
let [one, two] = arr;
console.log(one, two); // 101 201
</script>
</head>
<body>
</body>
</html>
2.2 全部解构:
let [one, two, three, a] = arr;
console.log(one, two, three, a); // 101 201 301 401
2.3 筛选解构:
let [, , , a] = arr;
console.log(a); //
2.4 解构时,同级之间的解构,效果是相同的,不管结构出来的是一维数组或是二维数组,只是解构结构,不解构内容
let arr = [10, [20, 30], 40];
console.log(arr[1][0]); //
let [one, two, three, four] = arr;
console.log(one, two, three, four); //10 [20, 30] 40 undefined
2.5 内层数组解构:
let arr = [10, [20, 30], 40];
let [one, [two, three], four] = arr;
console.log(one, two, three, four); //10 20 30 40
2.6 交换两个变量的值:相当于重新定义了let a ,let b ,而let是不能再次定义的
let a = 10,
b = 20;
let [a, b] = [b, a]; //报错,let定义了同名变量
换一种方式:
let a = 10,
b = 20;
[a, b] = [b, a];
console.log(a, b); //20, 10
2.7 小括号解构:使用小括号扩起来,可以避免冲突
let User = {
name: 'aluoha',
age: 25
},
name = 'zhangsan',
age = 30;
console.log(name, age); // zhangsan 30
//小括号: 把下面这个 转成解构表达式
({
name,
age
} = User);
console.log(name, age); // aluoha 25
2.8 去掉小括号,会造成冲突
<script>
let User = {
name: 'aluoha',
age: 25
},
name = 'zhangsan',
age = 30; // 小括号去掉,会造成定义冲突
let {
name,
age
} = User;
console.log(name, age); // 定义冲突
</script>
2.9 重命名局部变量:
let User = {
name: 'aluoha',
age: 25
}; //重命名局部变量,mySex:赋初始值
let {
name: myName,
age: myAge,
sex: mySex = 'man'
} = User;
console.log(myName, myAge, mySex); // aluoha 25 man
3.解构表达式作为参数:
let User = {
name: 'aluoha',
age: 25
},
name = 'zhangsan',
age = 40; console.log(name, age); //zhangsan, 40 function show(obj) {
console.log(obj);
console.log(obj === User); //true
}
show({
name,
age
} = User); //表达式传值,把User传给了obj console.log(name, age); //aluoha, 25
arguments 参数:
let User = {
name: "aluoha",
age: 25
};
name = 'zhangsan',
age = 30;
function show() {
console.log(arguments); // {name:'aluoha',age:25}
console.log(name, age); // aluoha 25
}
show({
name,
age
} = User);
4. 解构:
let User = {
name: 'aluoha',
age: 25,
class: {
group1: {
one: '陈世美',
two: '马汉'
},
group2: {
one: '张龙',
two: '白眉鹰王'
}
}
};
let {
class: {
group1
}
} = User;
console.log(group1.one); // 陈世美
console.log(group1.two); // 马汉
4.1 多层解构:
let User = {
name: 'aluoha',
age: 25,
class: {
group1: {
one: '陈世美',
two: '马汉'
},
group2: {
one: '张龙',
two: '白眉鹰王'
}
}
};
let {class: {group1: {one,two}}} = User;
console.log(one, two);
4.3 解构:
let {
class: {
group2: dierzu
}
} = User;
console.log(dierzu.one); //张龙
console.log(dierzu.two); //白眉鹰王
4.4 解构,添加自定义变量:
let {
class: {
group1: {
one,
two,
three = '展昭'
}
}
} = User;
console.log(one, two, three); //陈世美 马汉 展昭