一、数组的解构赋值:
1.基本用法
let [a, b, c] = [1, 2, 3]; console.log(a, b, c); //1,2,3 let [d, ,] = [1, 2, 3]; console.log(d); //1 let [[e], f] = [[1], 2]; console.log(e, f); //1,2 let [g, ...h] = [1, 2, 3]; console.log(g, h); //1,[2,3]
2.不完全解构---右边提供的值要比变量多
let [[i]] = [[1, 2], 3]; console.log(i); //1
3.解构赋值失败为undefined
let [j] = []; console.log(j); //undefined
4.支持解构赋值提供默认值
let [k = 1, l = 2] = [3]; console.log(k, l); //3,2
规则是先看右边的值是否严格等于undefined,如果是undefined才会用默认值,除此之外,都是优先用右边提供的值。
let [m = 1, n = 2] = [undefined, null]; console.log(m, n); //1,null
默认值支持是一个表达式,比如一个函数,赋值规则还是遵守先看右边是否为undefined。
function func1() { return 2; } let [o = func1()] = [1]; console.log(o); //1
默认值支持使用别的变量,但前提是这个变量已经提前声明,否则会报错
let [p = 1, q = p] = []; console.log(p, q); //1,1
二、对象的解构赋值
1.基本用法
对象解构赋值与数组有些不同,数组像按照等号对称的赋值,而对象是按照key名相同赋值,与顺序无关
let { a, b } = { b: 1, a: 2 }; console.log(a, b); //2,1