ES6解构赋值

112 阅读1分钟
  • 数组的解构赋值

    let [a, b, c] = [1, 2, 3];
    
  • 对象的解构赋值

    let { foo, bar } = { foo: 'aaa', bar: 'bbb' };
    foo // "aaa"
    bar // "bbb"
    
  • 字符串的解构赋值

    const [a, b, c, d, e] = 'hello';
    a // "h"
    b // "e"
    c // "l"
    d // "l"
    e // "o"
    
  • 结构赋值的用途:

    1. 交换变量的值
    let x = 1;
    
    let y = 2;
    
    [x, y] = [y, x];   // 这样就可以直接交换变量的值
    
    
    1. 从函数返回多个值

      函数只能返回一个值,如果要返回多个值,只能将它们放在数组或对象里返回。有了解构赋值
      取出这些值就非常方便。
      
      // 返回一个数组
      
      function example() {
        return [1, 2, 3];
      }
      let [a, b, c] = example();
      
      // 返回一个对象
      
      function example() {
        return {
          foo: 1,
          bar: 2
        };
      }
      let { foo, bar } = example();
      
  1. 提取json数据

    解构赋值对提取 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]
    
  2. 遍历 Map 结构

    任何部署了 Iterator 接口的对象,都可以用for...of循环遍历。Map 结构原生支持 Iterator 接口
    配合变量的解构赋值
    获取键名和键值就非常方便。
    
    const 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) {
  // ...
}