变量的解构赋值

变量的解构赋值

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

数组的解构赋值
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){};

输入模块的指定方法

const {sourceMap,sourceCode} = require("source");