Day1-ES6-3-变量解构赋值


1.数组解构赋值

模式匹配

let [a,b,c] =[1,2,3]
//  a = 1 b = 2 c = 3

如无匹配值(解构不成功)则变量的值为 undefined

解构可设置默认值

let [a = 1, b = 2] = [ 2 ]
// a = 2, b = 2
let [a = 1 , b = 2] = [ undefined, null ]
// a = 1, b= null

当数组成员严格等于(===)undefined,默认值才生效。 

2.对象解构赋值

同样的模式匹配,解构不成功变量的值为undefined。同数组可设置默认值。

let {aa,bb} = {bb:3,aa:1}
//对象的属性没有次序,变量必须与属性同名,才能取到正确的值。
let { aaa: ccc} = { aaa: '111', ccc: '222' };
ccc // "111"
foo // error: aaa is not defined
//对象的解构赋值的内部机制,是先找到同名属性,然后再赋给对应的变量。

 3.字符串解构赋值

const [a, b, c, d, e] = 'hello';
a // "h"
b // "e"
c // "l"
d // "l"
e // "o"

字符串被转化成一个类似数组的对象

4.函数参数解构赋值

function add([x, y]){
  return x + y;
}

add([1, 2]); // 3

5.作用

  1. 交换变量的值
    [x, y] = [y, x];
      
  2. 函数返回多个值
    function a() {
      return {
        id:'1',
        phone:'136'
      };
    }
    let {id, phone} = a();
    console.log(id,phone);
    // 1 136
  3. 函数参数定义
    function f([x, y, z]) { ... }
    f([1, 2, 3]);
    // 有序对应
    function f({x, y, z}) { ... }
    f({z: 3, y: 2, x: 1});
    // 无序对应
  4. 提取json数据
    let jsonData = {
    a: 1,
    b: 'test',
    c: {
    aa: '11',
    bb: '22'
    }
    }
    let {a: id, title,c={aa: '0',bb:'0',cc:'0'}} = jsonData;
    id 1
    title undefined
    c {aa:11,bb:22}
  5. 函数参数默认值
    let data = {
      a: '1',
      b: {
        aa: 11,
        bb: 22
      }
    }
    function fuc({a:'0',b:{aa:'00',bb:'00'},c:11}={}){
    console.log(a);
    console.log(b);
    console.log(c);
    }
    fuc(data);
    //当fuc()时会报错,需添加
    {}为整个参数的默认值
    
    
    
    
  6. 输入模块的方法
    const {fuc1,fuc2} =  require("aaa");

相关