变量的解构赋值
定义:允许按照一定的模式,从数组的对象中提取值
数组的解构赋值
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) {};输入模块的指定方法