es6 解构

一、 数组的解构

1. 基本

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

2. 可嵌套

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

3. 可忽略

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

4. 不完全解构

let [a = 1, b] = []; // a = 1, b = undefined

5. 剩余运算符

let [a, ...b] = [1, 2, 3];
//a = 1
//b = [2, 3]

6. 字符串等

在数组的解构中,解构的目标若为可遍历对象,皆可进行解构赋值。可遍历对象即实现 Iterator 接口的数据。

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

7. 解构默认值

let [a = 2] = [undefined]; // a = 2

当解构模式有匹配结果,且匹配结果是 undefined 时,会触发默认值作为返回结果。

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

a 与 b 匹配结果为 undefined ,触发默认值:a = 3; b = a =3 a 正常解构赋值,匹配结果:a = 1,b 匹配结果 undefined ,触发默认值:b = a =1 a 与 b 正常解构赋值,匹配结果:a = 1,b = 2

8. 运用

console.log("常规", Math.max(1, 2, 3));
//apply (改变函数内部的this指向,函数的参数列表)
console.log("apply", Math.max.apply(null, [1, 2, 3]));
//解构
console.log("解构", Math.max(...[1, 2, 3]));

二、 对象的解构

1. 基本

let { foo, bar } = { foo: "aaa", bar: "bbb" };
// foo = 'aaa'
// bar = 'bbb'

let { baz: foo } = { baz: "ddd" };
// foo = 'ddd'

2. 可嵌套可忽略

let obj = { p: ["hello", { y: "world" }] };
let {
  p: [x, { y }]
} = obj;
// x = 'hello'
// y = 'world'
let obj = { p: ["hello", { y: "world" }] };
let {
  p: [x, {}]
} = obj;
// x = 'hello'

3. 不完全解构

let obj = { p: [{ y: "world" }] };
let {
  p: [{ y }, x]
} = obj;
// x = undefined
// y = 'world'

4. 剩余运算符

let { a, b, ...rest } = { a: 10, b: 20, c: 30, d: 40 };
// a = 10
// b = 20
// rest = {c: 30, d: 40}

5. 解构默认值

let { a = 10, b = 5 } = { a: 3 };
// a = 3; b = 5;
let { a: aa = 10, b: bb = 5 } = { a: 3 };
// aa = 3; bb = 5;
Last Updated:
Contributors: zerojs