1用途
1 易于交换变量的值,语句清晰易懂
2 若函数返回多个值,可一次性提取。例exa是一个函数并返回一个多属性对象obj
let {foo, bar} = eax()
3 定义函数的参数时,可与变量名相对应
4 快速提取JSON值
5 为函数指定默认参数值
不是指定形参的默认值,当函数无对应实参时,可使用默认参数值
6 方便遍历map结构
7 为输入模块指定方法
2 用法
1 允许按照对应模式从数组和对象中提取值,对变量进行赋值,即模式匹配,类型相同
let [a, b, c] = [1, 2, 3]
变量解构不成功即为undefined
2 解构赋值的实际是对象之间的赋值,是先找到同名属性,赋值给对应变量,被赋值的是后者而不是前者,即对于赋值与被赋值的键值对,做值与值的赋值,与键无关系,键只为了能让两个值对应上
let {foo: baz} = {foo: 'aaa'}
//baz === 'aaa'
//foo not defined
3 数组、对象、字符串、函数的解构赋值基本一致
3 默认值
只有成员严格等于‘undefined’,默认值才能生效,注意的是‘null’不严格等于‘undefined’
let [x = 'a', y = 'b'] = ['c', undefined]
//x: c, y: b
4 注意
1 已声明变量用于解构赋值,须慎重小心
应用()进行包裹,因引擎会将{}解析成代码块
2 数组是特殊的对象,可对数组进行对象属性解构
3 解构赋值是对象之间赋值,undefined和null无法转换为对象,因此直接赋值会失败
let { prop: x } = undefined; // TypeError
let { prop: y } = null; // TypeError
let { prop: a } = {prop: undefined}; // a: undefined
let { prop: b } = {prop: null}; // b: null
4 函数也可以解构并赋初值,存在两种写法
1 给函数的形参赋默认值
为变量x、y设置默认值,传参时只要参数是undefined,就使用默认值,推荐使用该方法给函数设定默认值
function move({x = 0, y = 0} = {}) {
return [x, y];
}
move({x: 3, y: 8}); // [3, 8]
move({x: 3}); // [3, 0]
move({}); // [0, 0]
move(); // [0, 0]
2 给函数的参数解构赋值
该方式相当于设置了等级最低的解构赋值,若无其他的解构赋值(包括undefined)时,启用该解构赋值,该方式与前者不同,前者只要是值为undefined就启用默认值。
function move({x, y} = { x: 0, y: 0 }) {
return [x, y];
}
move({x: 3, y: 8}); // [3, 8]
move({x: 3}); // [3, undefined]
move({}); // [undefined, undefined]
move(); // [0, 0]
5 避免使用圆括号