变量的解构赋值

定义:允许按照一定的模式,从数组的对象中提取值

数组的解构赋值
var [foo, bar] = [1, 2] // foo 1 bar 2

解构赋值可以指定默认值,如果默认值是表达式,那么这个表达式的求值是惰性的

var [foo = true] = [] // foo true
var f = () => 1
var [foo = f()] = [null] // foo null
var [foo = f()] = [undefined] // foo 1
对象的解构赋值

对象的结构赋值与数组的不同在于,变量必须与属性同名

var { bar, foo } = { foo: "aaa", bar: "bbb" }
// or
({ bar, foo }) = { foo: "aaa", bar: "bbb" }

tips: (…)是使用对象字面量解构赋值时不需要声明的语法。但是前面的语句需要有分号以免被当做函数

对象的解构赋值可以方便的将现有对象的方法赋值到某个变量

let { log, sin, cos } = Math
函数参数的解构赋值
[[1, 2], [3, 4]].map(([a, b]) => a + b);

函数参数的解构也可以使用默认值

function move({ x = 0, y = 0 } = {}) {
  return [x, y]
};
move({ x: 3, y: 8 }) // [3,8]

如果去掉={} 在执行move()时将会报错

解构赋值的用途

从函数返回多个值

function foo() {
  return [1, 2, 3]
}
var [a, b, c] = foo()

函数参数的定义

function f({ x, y, z }) {}
f({ z: 3, x: 1, y: 2 })

提取json

var json = {
  id: 42,
  status: "ok",
  data: [1, 2, 3, 4,]
}
let { id, status, data } = json

遍历map解构

for (let [key, value] of map) {};

获取键

for (let [key] of map) {};

只想获取值

for (let [, value] of map) {};

输入模块的指定方法