什么是解构赋值
ES6
允许按照一定的模式,从数组或对象中提取值,给变量进行赋值,称为解构赋值。
解构赋值的分类
- 数组解构赋值
- 对象解构赋值
- 字符串解构赋值
- 布尔解构赋值
- 函数解构赋值
- 数值解构赋值
数组解构赋值
按照索引位置匹配
常用示例
1 | let a,b;
|
2 | [a,b] = [1,2];
|
3 | console.log(a,b);
|
1 | let a,b,rest;
|
2 | [a,b,...rest] = [1,2,3,4,5,6];
|
3 | console.log(a,b,rest);
|
使用场景
默认值
如果解构赋值没有在结构上成功配对,就是只声明了变量,没有赋值为undefined
,所以用默认赋值来解决这种情况。
1 | let a,b,c;
|
2 | [a,b,c] = [1,2];
|
3 | console.log(a,b,c);
|
4 | [a,b,c = 3] = [1,2];
|
5 | console.log(a,b,c);
|
变量交换
1 | let a = 1;
|
2 | let b = 2;
|
3 | [a,b] = [b,a];
|
4 | console.log(a,b);
|
函数返回值
1 | function f() {
|
2 | return [1,2];
|
3 | }
|
4 | let a,b;
|
5 | [a,b] =f();
|
6 | console.log(a,b);
|
选择性结构赋值
1 | function f() {
|
2 | return [1,2,3,4,5,6];
|
3 | }
|
4 | let a,b,c;
|
5 | [a,,,b] =f();
|
6 | console.log(a,b);
|
1 | function f() {
|
2 | return [1,2,3,4,5,6];
|
3 | }
|
4 | let a,b,c;
|
5 | [a,...b] =f();
|
6 | console.log(a,b);
|
对象解构赋值
按照 key
value
匹配分方式
1 | let a,b;
|
2 | ({a,b} = {a:1,b:2})
|
3 | console.log(a,b)
|
1 | let o = {p:42,q:true};
|
2 | let {p,q} = o;
|
3 | console.log(p,q);
|
使用场景
默认值
1 | let {a=10,b=5} = {a:3};
|
2 | console.log(a,b);
|
嵌套对象
1 | let metaData = {
|
2 | title:'abc',
|
3 | test:[{
|
4 | title:'title',
|
5 | desc:'description'
|
6 | }]
|
7 | }
|
8 | let {title:esTitle,test:[{title:cnTitle}]} = metaData;
|
9 | console.log(esTitle,cnTitle);
|
函数解构赋值
1 | function f({x = 0, y = 0} = {}) {
|
2 | return [x, y];
|
3 | }
|
4 | console.log(f({x: 3, y: 8}));
|
5 |
|
6 |
|
7 | console.log(f({x: 3}));
|
8 |
|
9 |
|
10 | console.log(f({}));
|
11 |
|
12 |
|
13 | console.log(f());
|
14 |
|
1 | function f({x, y} = { x: 0, y: 0 }) {
|
2 | return [x, y];
|
3 | }
|
4 |
|
5 | console.log(f({x: 3, y: 8}));
|
6 |
|
7 |
|
8 | console.log(f({x: 3}));
|
9 |
|
10 |
|
11 | console.log(f({}));
|
12 |
|
13 |
|
14 | console.log(f());
|
15 |
|