解构赋值的规则是,只要等号右边的值不是对象或数组,就先将其转为对象。但由于undefined和null无法转为对象,所以对它们进行解构赋值,都会报错。

  1. let [a,b,c]=[1,2,,3]
  2. //按照位置依次赋值

模式匹配

等号两边的模式相同就能按照位置依次赋值

数组解构赋值

  1. let [a,[[b],[c]]]=[1, [ [2],[3] ] ]
  2. let [ , , thrid] = [1,2,3]
  3. //不完全解构
  4. let [a,b] =[1,2,3]
  5. //按位置匹配前两个

对象解构赋值

  1. let { foo, bar } = { foo: 'aaa', bar: 'bbb' };
  2. //解构的对象不能为undefined、null
  3. const {a,b,c,d,e} = obj || {};;
  4. const f = a + d;
  5. const g = c + e;
  6. const {a:a1} = obj;

嵌套对象解构赋值

  1. let obj = {
  2. p: ['Hello',{ y: 'World' }]
  3. };
  4. let {p: [x, { y }] } =obj//p为模式,不做为对象赋值
  5. let { p, p: [x, { y }] } = obj; //将p作为对象赋值

字符串解构赋值

  1. const [a,b,c,d,e] = 'hello'
  2. let { length:len } ="hello" //len 5

数值和布尔值的解构赋值

  1. let {toString: s} = 123;
  2. let {toString: s} = true;

数值布尔值包装对象都有 toString
先将右边转化成对象

函数参数解构赋值

  1. function add([x, y]){
  2. return x + y;
  3. } add([1, 2]); // 3
  4. [[1, 2], [3, 4]].map(([a, b]) => a + b);