ES6 解构
解构:按照一定模式,从数组和对象中提取值,对变量进行赋值
let[a,b,c]=[1,2,3];
只要等号两边的模式相同,左边的变量就会被赋值予对应的值。例:let[a,[[b],c]]=[1,[[2],3]]
默认值:ES6内部使用严格相等运算符(===),判断一个位置是否有值,所有,只有当一个数组成员严格等于undefined,默认值才会生效,如果默认值是一个表达式,那么这个表达式
是惰性求值的(只有在用到的时候,才会求值)
let[x=1]=[undefined] //x=1
function f(){
console.log(“aaa”);
}
let [x=f()]=[1]; //x =1
对象的解构赋值:
let {foo,bar}={foo:“aaa”,bar:“bbb”}
变量必须与属性同名才能取到正确的值
let {baz}= {foo:“aaa”,bar:“bbb”}
baz //undefined
字符串的解构赋值:
const [a,b,c,d,e]=“hello”;
a //h
b //e
c //l
d //l
e //o
数值和布尔值的解构赋值:
解构赋值时,如果等号右边是数值和布尔值,则会先转为对象
let {toString:s}=123;
s===Number.prototype.toString //true
let {toString:s} = true;
s===Boolen.prototype.toString //true
函数参数的解构赋值
function add([ x,y ]){
return x+y;
}
add ([1,2]); // 3
函数add的参数表面上是一个数组,但在传入参数的那一刻,数组参数就被解构成变量x和y
默认值与解构赋值结合使用:
function foo ({x,y=5}){
console.log(x,y);
}
foo({ }) // undefined,5
foo({x=1}) // 1,5
只有当函数foo的参数是一个对象时,变量x和y才会通过解构赋值而生成,如果函数foo调用时参数不是对象,变量x和y就不会生成,从而报错。只有参数对象没有y属性时,y的默认值5才会生效
双重默认值
function fetch(url,{method=“GET”}={})
fetch(‘http://example.com’) //GET