上图是在开发过程中遇到的报错,才发现自己真的很少使用数组结构。回顾一下es6新的语法糖数组解构真的很香~
以往赋值:
let a = 1,
let b = 2,
let c = 3
const arr = [a,b,c]
使用数组解构赋值
const [a,b,c] = [1,2,3]
完全解构
解构赋值的写法本质上属于匹配模式
只要等号左右模式相同,左边的变量既可以取到右边对应的值
举些例子:
let [a,[b,c] ] = [1,[2,3]]
a // 1
b // 2
c // 3
let [,,d] = [1,2,3]
d // 3
let [e,,f] = [1,2,3]
e // 1
f // 3
let [g,...h] = [1,2,3,4]
g // 1
h // [2,3,4]
let [i,j,...k] = [1]
i // 1
j // undefined 如果解构不成功,值等于undfiend
k //[]
上面是完全解构,数组解构也支持不完全解构。
不完全解构
let [x,y] = [1,2,3]
x // 1
y // 2
解构赋值的默认值
let [a = true] = []
a // true
let [b =1, c = 1] = [2,undefined]
b // 2
c // 1
// es6内部使用严格===,undefined!==null 只有等于undefined 才会默认赋值
let [d=1] = [undefined]
d // 1
let [e = 1] = [null]
e // null
如果默认值是一个函数,那么如果有默认值是不会执行这个函数
let [a=fn()] = [1]
a // 1
默认值可以引用已经解构的其他变量
let [a,b=a] = [1,2]
a // 1
b // 2
// d 作为默认值时还没有声名
let [c=d,d]= [1,2] // ReferenceError: d is not defined