阅读 160

解构赋值

变量的结构赋值

  1. 数组的解构
let [a,b] = [1,2];
a//1
b//2

let [a,...b] = [1]
a //1
b // []

let [a,b,...c] = [1]

a//1
b//undefined
c []
复制代码
不完全解构
let [a,[b,c],d] = [1,[2],3]
a// 1
b // 2
c // undefined
d // 3
复制代码
带默认值的解构
let [a = true] = [];
a // true

let [a,b='222'] = [1,undefined]
b // 222

let [a,b= '222'] = [1, null]
b // null

ES6内部是使用严格相等运算符(===)
以上可看出 当某个数组的成员严格等于undefined时,默认值才会生效
复制代码
  1. 对象的解构赋值
let { bus } = {bus: '11', desk: '22'};
bus // 11

let {baz} = {bus: '11', desk: '22'};
baz // undefined

对象的解构与数组的解构不同,数组的解构是按次序的,而对象的解构,变量必须与属性同名才能取到值
如果名字不一致的话 就必须写成下面这样的

let {bus: baz} = { bus: '111'}
baz// 111
复制代码
以上可以得出 对象解构赋值的本质: let { foo: foo, bar: bar } = { foo: "aaa", bar: "bbb" };
也就是 先找到同名的属性,然后将属性的值 赋值给变量

如以下就会报错

let {foo : baz} = {foo: '111'}
foo //error: foo is not defined

所以 上面的foo 其实是匹配的模式, baz才是被赋值的变量
复制代码
默认值

let {y: x = 3} = {}
复制代码

解构赋值的规则: 只要等号右边的值不是对象或数组,就先将其转为对象,由于undefined和null不能转成对象,所以对他们进行解构赋值就会报错

  1. 函数参数的解构


复制代码