1.解构赋值(Destructuring)
ES6 允许按照一定模式,从数组和对象中提取值(变量值的来源),对变量进行赋值(作用),这被称为解构。
2.数组的解构赋值
- 按下标一一对应地去赋值
let arr =[1,2,3]
let [a,b,c ] = arr
console.log(a,b,c) //1 2 3
- 左右数量不等
let [,b,c] = [1,2,3]
console.log(b,c) // 2,3
let [a,b,c] = [1,2]
console.log(a,b,c) //1 2 undefined
- 跳过部分
let [a, ,c] = [1,2,3]
console.log(a,c) //1 3
- 默认值
let [a,b,c=10] = [1,2,3]
console.log(a,b,c) // 1 2 3
- 嵌套
let [a,b,c] = [1,2,[3,4,5]]
console.log(a,b,c) // 1 2 [ 3, 4, 5 ]
3.对象的解构赋值:定义了两个变量;给这两个变量赋值;
- 本质-按属性名的一一对应关系来进行赋值
- 解构规则
必须要通过键名进行关联。
没有键名就是undefined
对象的解构赋值的内部机制,是先找到同名属性,然后再赋给对应的变量。 - 默认值
- 将现有对象的属性,赋值到某个变量
<script>
let{max,min,abs}=Math;
console.info(max(2,8,6,5,9))
console.info(min(2,8,6,5,9))
console.info(abs(2,8,6,5,9))//绝对值
</script>
- 沿着原型链进行
=号的右边是一个空数组,它是一个对象,它自己有没有一个属性名为push?它自己没有,但它的隐式原型上有push属性。所以,这里的push就是:[].proto.push - 函数参数中的解构赋值
<!-- 函数参数中的解构赋值 -->
<script>
function f(obj) {
console.info (obj.lastName,obj.age);
}
f({
lastName:"jake",
age:30
});
</script>
<!-- 函数参数中的解构赋值简化 -->
<script>
function f(lastName,age) {//形参
console.info(lastName,age);
}
f({lastName: "jake",age: 30 });//实参
</script>
4.解构赋值的应用
- 交换变量的值
<!--交换变量的值 -->
<script>
let a=2;
let b=4;
[a,b]=[b,a]
//把右边看作一个整体,就是一个数组,然后左边就是解构赋值。
console.info(a)
console.info(b)
</script>
- 快速获取从函数中返回的多个值
<script>
// 返回一个数组
function example() {
return [1, 2, 3];
}
let [a, b, c] = example();
console.log(a,b,c);// 1 2 3
// 返回一个对象
function example() {
return {
foo: 1,
bar: 2
};
}
let { foo, bar } = example();
console.log(foo,bar); //1 2
</script>
- 获取json数据中的值
<script>
let jsonData = {
id: 42,
status: "OK",
data: [867, 5309]
};
let { id, status, data: number } = jsonData;
console.log(id, status, number);
// 42 "OK" (2) [867, 5309]
</script>