数组的解构赋值 (按次序来比对)
完全解构 不完全解构 默认值 (es6 的解构是 === 的)
对象的解构赋值 (按照位置来取值)
也就是说, 对象的解构赋值的内部机制, 是先找到同名属性, 然后再赋给对应的变量真正被赋值的是后者, 而不是前者
- let { foo: baz } = { foo: "aaa", bar: "bbb" };
- baz // "aaa"
- foo // error: foo is not defined
- const node = {
- loc: {
- start: {
- line: 1,
- column: 5
- }
- }
- };
- let { loc, loc: { start }, loc: { start: { line }} } = node;
- line // 1
- loc // Object {start: Object}
- start // Object {line: 1, column: 5}
上面代码有三次解构赋值, 分别是对 locstartline 三个属性的解构赋值注意, 最后一次对 line 属性的解构赋值之中, 只有 line 是变量, loc 和 start 都是模式, 不是变量
字符串的解构赋值
数值和布尔值的解构赋值 (会优先被转换为对象)
函数参数的解构赋值
圆括号问题 (以下三种不得使用圆括号)
变量声明语句 函数参数 赋值语句的模式
使用
交换变量赋值
从函数返回多个值
函数参数的定义
提取 JSON 的值
函数参数的默认值
遍历 Map 结构 (任何部署了 Iterator 接口的对象, 都可以用 forof 循环遍历 Map 结构原生支持 Iterator 接口, 配合变量的解构赋值, 获取键名和键值就非常方便)
输入模块的指定方法
来源: https://www.2cto.com/kf/201803/726976.html