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