持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第3天,点击查看活动详情
在es6中,可以按照一定的规则,从数组或对象中提取值,并对变量进行赋值,这就是解构。下面我们来看下不同数据类型的解构赋值。
数组的解构赋值
let [a, b, c] = [1, 2, 3]
a // 1
b // 2
c // 3
let [x, , y] = [1, 2, 3]
x // 1
y // 3
上述例子中,从数组[1,2,3]中提取出值,然后按照对应位置,对变量进行赋值。在第二个例子当中,我们只取了数组的第一个和第三个数据,这样,第二个数据可以空出。
let [x, [[y], z]] = [1, [[2], 3]];
x // 1
y // 2
z // 3
let [x, ...rest] = [1, 2, 3]
x // 1
rest // [2, 3]
上述例子中可以看出,对于嵌套数组也是可以解构赋值的,另外,如果我们需要获取剩余的所有元素,可以直接在变量的前面加上...即可,可参见上述第二个例子。
let [x = 1] = []
x // 1
let [x = 1] = [2]
x // 2
另外,数组解构赋值允许对变量指定默认值,如果解构失败,变量就会取默认值。如上,我们指定x变量的默认值为1,如果数组为空,x的值就为1,如果数组不为空,则为数组解构的值。
对象的解构赋值
es6的解构赋值同样也适用于对象类型,如下:
let { a, b, c } = { a: 1, b: 2 }
a // 1
b // 2
c // undefined
let { a: x } = { a: 1, b: 2 }
x // 1
如上,我们可以将对象中的属性进行解构赋值,如果在对象中找不到对应的属性,值则为undefined。另外,在开发中,如果我们不想使用对象中的属性名字,那么可以将从对象中解构出来的属性赋值在一个变量上,上述第二个例子中,我们将属性a赋值在变量x上。
同样,对象的解构和数组一样也可以指定默认初始值,如果对象解构没有找到某个属性,那么将会取默认初始值,如下:
let { x = 3 } = {}
x // 3
字符串的解构赋值
字符串在解构赋值的时候,是会把字符串转化成一个类似数组的对象, 如下:
const [a, b] = 'js'
a // "j"
b // "s"
let { length : len } = 'js'
len // 2
类似数组的对象都有一个length属性,所以上例子中可以解构到length属性,其代表字符串的长度。
es6变量的解构赋值写法简洁易读,语义也比较清楚,是优化代码的好工具,在开发中,我们可以用它来提取从接口获取的json数据,还可以用它来对函数参数进行定义和赋默认初始值,还可以在循环遍历的时候进行属性的解构等等。