变量的解构赋值

数组的解构赋值(按次序来比对)

  • 完全解构
  • 不完全解构
  • 默认值(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}

上面代码有三次解构赋值,分别是对loc、start、line三个属性的解构赋值。注意,最后一次对line属性的解构赋值之中,只有line是变量,loc和start都是模式,不是变量。

字符串的解构赋值

数值和布尔值的解构赋值(会优先被转换为对象)

函数参数的解构赋值

圆括号问题(以下三种不得使用圆括号)

  • 变量声明语句
  • 函数参数
  • 赋值语句的模式

使用

  • 交换变量赋值
  • 从函数返回多个值
  • 函数参数的定义
  • 提取JSON的值
  • 函数参数的默认值
  • 遍历Map结构(任何部署了 Iterator 接口的对象,都可以用for...of循环遍历。Map 结构原生支持 Iterator 接口,配合变量的解构赋值,获取键名和键值就非常方便。)
  • 输入模块的指定方法
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容