美文网首页
阮一峰es6要点总结——解构赋值

阮一峰es6要点总结——解构赋值

作者: 布蕾布蕾 | 来源:发表于2017-03-27 11:47 被阅读0次

    原文地址

    解构赋值

    核心思想——模式匹配

    基本概念

    用法:

    • 数组解构赋值
    • 对象解构赋值
    • 字符串解构赋值
    • 数值和布尔值解构赋值
      均可设置默认值——内部使用'==='判断,是否等于undefined。

    基本写法:

    • 数组的:
    let [a, b, c] = [1, 2, 3];
    let [foo, [[bar], baz]] = [1, [[2], 3]];
    foo // 1
    bar // 2
    baz // 3
    
    let [ , , third] = ["foo", "bar", "baz"];
    third // "baz"
    
    let [x, , y] = [1, 2, 3];
    x // 1
    y // 3
    
    let [head, ...tail] = [1, 2, 3, 4];
    head // 1
    tail // [2, 3, 4]
    
    let [x, y, ...z] = ['a'];
    x // "a"
    y // undefined
    z // []
    
    • 对象的:
    let { foo, bar } = { foo: "aaa", bar: "bbb" };
    foo // "aaa"
    bar // "bbb"
    
    //变量名与属性名不同
    var { foo: baz } = { foo: 'aaa', bar: 'bbb' };
    baz // "aaa"
    

    对象的解构赋值,要理解,匹配模式和实际的变量

    • 字符串的
    const [a, b, c, d, e] = 'hello';
    a // "h"
    b // "e"
    c // "l"
    d // "l"
    e // "o"
    
    • 数值和布尔值
    let {toString: s} = 123;
    s === Number.prototype.toString // true
    
    let {toString: s} = true;
    s === Boolean.prototype.toString // true
    

    比较特殊,会先将其转换为基本包装对象。null与undefined无法转换为对象。

    一些问题

    • 函数参数的解构赋值
    • 注意圆括号的问题

    用途

    • 交换变量值
    let x = 1;
    let y = 2;
    
    [x, y] = [y, x];
    
    • 从函数返回多个值
    // 返回一个数组
    
    function example() {
      return [1, 2, 3];
    }
    let [a, b, c] = example();
    
    // 返回一个对象
    
    function example() {
      return {
        foo: 1,
        bar: 2
      };
    }
    let { foo, bar } = example();
    
    • 函数参数的定义
    // 参数是一组有次序的值
    function f([x, y, z]) { ... }
    f([1, 2, 3]);
    
    // 参数是一组无次序的值
    function f({x, y, z}) { ... }
    f({z: 3, y: 2, x: 1});
    
    • 函数参数的默认值
    jQuery.ajax = function (url, {
      async = true,
      beforeSend = function () {},
      cache = true,
      complete = function () {},
      crossDomain = false,
      global = true,
      // ... more config
    }) {
      // ... do stuff
    };
    
    • 提取JSON数据
    let jsonData = {
      id: 42,
      status: "OK",
      data: [867, 5309]
    };
    
    let { id, status, data: number } = jsonData;
    
    console.log(id, status, number);
    // 42, "OK", [867, 5309]
    
    • 遍历Map结构
    var map = new Map();
    map.set('first', 'hello');
    map.set('second', 'world');
    
    for (let [key, value] of map) {
      console.log(key + " is " + value);
    }
    // first is hello
    // second is world
    
    // 获取键名
    for (let [key] of map) {
      // ...
    }
    
    // 获取键值
    for (let [,value] of map) {
      // ...
    }
    
    • 输入模块的指定方法
    const { SourceMapConsumer, SourceNode } = require("source-map");
    

    相关文章

      网友评论

          本文标题:阮一峰es6要点总结——解构赋值

          本文链接:https://www.haomeiwen.com/subject/bhkugttx.html