解构赋值在代码中比较常用的一种赋值方式,文档主要记录了函数和对象的解构赋值
- 数组的解构赋值
在数组解构中,进行解构赋值的数据必须具有Iterator接口
let [a, b, c] = [1, 2, 3];
// a ==>> 1
// b ==>> 1
// c ==>> 1
let [x, y, z] = new Set(['a', 'b', 'c']);
x ==>> "a"
let [x, ...y] = [1, 2, 3];
x ==>> 1
y ==>> [2, 3]
如果解构不成功,变量值为默认值
let [x, y, ...z] = ['a'];
x ==>> a
y ==>> undefined
z ==>> []
可以设置默认值,只有当一个数组成员严格等于undefined时默认值才能生效
let [x = 1] = [undefined];
x ==>> 1
let [x = 1] = [null];
x ==>> null
默认值也可以引用解构赋值的其他变量,但该变量必须已经声明
let [x = 1, y = x] = []; // x=1; y=1
let [x = 1, y = x] = [2]; // x=2; y=2
let [x = 1, y = x] = [1, 2]; // x=1; y=2
let [x = y, y = 1] = []; // ReferenceError: y is not defined
- 对象的解构赋值
声明的变量必须和属性名相同,才能取到正确的值
let {bar, foo} = {foo: "a", bar: "b"};
foo ==>> a
bar ==>> b
let { ttt } = {foo: "a"};
ttt ==>> undefined
自定义变量名
let { foo: baz } = { foo: "aaa" };
baz ==>> aaa
嵌套解构赋值
let obj = {
p: [
'Hello',
{y: 'World'}
]
};
let { p: [x, {y}] } = obj;
x ==>> "Hello"
y ==>> "World"