ES6 允许按照一定模式,从数组和对象中提取值,对变量进行赋值,这被称为解构(Destructuring)。
以前,为变量赋值,只能直接指定值。
let [a, b, c] = [1, 2, 3];
上面代码表示,可以从数组中提取值,按照对应位置,对变量赋值。
解构赋值
1. 数组解构赋值
类型一
1 2 3 4 5 6
| { let a, b, r; [a, b] = [2, 3]; console.log(a, b) }
|
类型二 …方法
1 2 3 4 5
| { let a, b, r; [a, b, ...r] = [1, 2, 3, 4, 5, 6]; console.log(a, b, r) }
|
2. 对象解构赋值
类型
1 2 3 4 5
| { let a, b; ({ a, b } = { a: 1, b: 2 }); console.log(a, b); }
|
默认值
1 2 3 4 5 6
| { let a, b, c; [a, b, c = 3] = [1, 2] console.log(a, b, c); }
|
使用的场景
场景1 值的交换,比取中间值c方便。
1 2 3 4 5 6
| { let a = 1; let b = 2; [a, b] = [b, a] console.log(a, b); }
|
场景2 取得返回值中的数组形式。
1 2 3 4 5 6 7 8
| { function f() { return [1, 2]; } let a, b; [a, b] = f(); console.log(a, b); }
|
场景3 筛选值。
1 2 3 4 5 6 7 8 9
| { function f() { return [1, 2, 3, 4, 5]; } let a, b; [a, , , b] = f(); console.log(a, b); }
|
场景4 对象赋值
1 2 3 4 5
| { let o = { p: 10, q: true }; let { p, q } = o; console.log(p, q) }
|
场景5 json 中的取值
1 2 3 4 5 6 7 8 9 10 11
| { let data = { title: 'abc', names: [{ title: 'title', desce: 'description' }] } let { title: esTitle, names: [{ title: cnTitle }] } = data; console.log(esTitle, cnTitle) }
|