三个类型的结构赋值都可以用对象来展示
字符串可以用索引值来取值,所以是特殊的数组,数组是特殊的对象,所以都可以转为对象1
2
3
4let str = '123'
let [a,b,c] = str // a = 1,b = 2, c = 3
let {0:a1,1:b1,2:c1} = str // a1 = 1, b1 = 2, c1 = 3
let {length: len} = str // len = 3
数组解构赋值
数组的解构赋值按照顺序来得,解构不成功就为undefined1
2
3
4
5let [a, b, c] = [1, 2, 3]
let [a1, b1] = [1, 2, 3]
let [a2, b2] = [1]
let [a3, [b3]] = [1, [1, 2]]
let [a4, b4='2'] = [1]
数组赋值默认值
只有解构赋值为undefined时才会取默认值1
2let [a4, b4='2'] = [1]
let [a5, b5='3'] = [1, null] // b5 === null
对象解构赋值
对象的解构赋值按照属性来的1
2
3
4
5let {a1} = {b1: 2, a1: 3}
// 实际
let {a1: a1} ={b1: 2, a1: 3} // a1和a1重复,所以可以省略
// 所以变量名可以与属性不一致
let {a1: c} = {b1: 2, a1: 3} // a1是匹配的模式,c才是变量
对象的解构赋值能赋值继承的属性和不可枚举属性
1 | let Detail = function(){} |
对象结构嵌套
1 | const node = { |
函数参数数组的解构赋值
1 | function add([x, y]){ |
函数参数对象的解构赋值
1 | function move({x = 0, y = 0} = {}) { // 一定要加{}不然就会报错 |
解构赋值的用途
1、交换变量1
2
3let x = 1;
let y = 2;
[x, y] = [y, x];
2、函数返回多个值1
2
3
4function example() {
return [1, 2, 3];
}
let [a, b, c] = example();
3、函数参数的定义1
2
3// 参数是一组有次序的值
function f([x, y, z]) { ... }
f([1, 2, 3]);
4、输入某块的指定方法1
const { SourceMapConsumer, SourceNode } = require("source-map");