解构赋值
解构赋值可以将数组中的元素或对象中的属性赋值给指定的变量。
1. 数组解构
1.1 基本用法
1 | var a, b, rest; |
上面的例子都是数组字面量或对象字面量的解构,但实际上大部分情况时对变量的解构。
1 | var foo = ['one', 'two', 'three']; |
1.2 使用解构赋值实现变量交换
1 | var a = 1; |
1.3 解构函数返回值
1 | function f() { |
1.4 忽略某些返回值
1 | function f() { |
1.5 数组解构与正则结合使用的实例
1 | // 使用正则和赋值解构获取url中的协议、主机、路径等信息 |
2. 对象解构
2.1 基本用法
1 | var o = {p: 42, q: true}; |
2.2 对象字面量的解构
1 | var a, b; |
为了避免对象字面量的大括号
{ }
与代码块的大括号混淆,字面量解构的时候需要在外层包裹一个小括号( )
。
2.3 为解构的对象属性值定义新的变量名
1 | var o = {p: 42, q: true}; |
2.4 属性默认值
对于不存在的属性,默认解构得到的属性为undefined
,但是可以设置默认值
1 | var {a, b} = {a: 3}; |
2.5 同时提供默认值并取新变量名
1 | var {a:aa = 10, b:bb = 5} = {a: 3}; |
2.6 对象解构与函数默认参数结合使用的实例
1 | // ES5版本:函数参数默认值的设置 |
2.7 对象解构和数组解构嵌套使用
1 | var metadata = { |
2.8 循环迭代中使用解构赋值
1 | var people = [ |
2.9 通过对象解构直接从函数参数中获取对象字段
1 | function userId({id}) { |
2.10 动态解构对象字段
1 | let key = 'z'; |
2.11 变参解构切割对象
1 | let {a, b, ...rest} = {a: 10, b: 20, c: 30, d: 40} |
2.12 解构特殊属性
1 | // fizz-buzz属性不能作为变量名 |
参考:
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Destructuring_assignment