ES6 变量的解构赋值
ES6允许 按照一定的模式,从数组和对象中提取值,对变量进行赋值,这被称为解构。结构赋值在实际开发中可以大量减少我们的代码量,并且让我们的程序结构更清楚。赋值解构已经看了好多遍了,但是每次记不住,今天来写一篇博客来加深印象
一、数组的解构赋值
我觉得数组的解构赋值的作用就是能够同时给多个变量进行赋值,不用像以前那样需要些多个赋值表达式,下面是数组的解构赋值的基本用法
基本使用方法:
1.模式匹配:只要等号两边的模式相同,左边的变量就会被赋予对应的值
let [a,b,c]=[1,2,3];
console.log(a); //1
console.log(b); //2
console.log(c); //3
//嵌套数组进行解构
let [foo,[[bar],baz]]=[1,[[2],3]];
console.log(foo); //1
console.log(bar); //2
console.log(baz) //3
let [x,y,...z]=['a'];
console.log(x); //a
console.log(y); //undefined
console.log(z); //[]
2.不完全解构:等号左边的匹配模式只匹配等号右边数组的一部分
let [x,y]=[1,2,3];
console.log(x); //1
console.log(y); //2
3.只要某种数据结构具有Iterator接口,都可以采用数组形式的解构赋值
例如:对于Set结构,也可以使用数组的解构赋值
let [x,y,z]=new Set(["a","b","c"]);
console.log(x); //a
4.解构赋值允许指定默认值:只有当数组成员严格等于undefiend,默认值才会生效
var [foo=true]=[];
console.log(foo); //true
var [x=1]=[undefined];
console.log(x); //1
var [y=1]=[null];
console.log(y); //null
二、对象的赋值解构
基本使用方法:
1、变量名必须与属性名同名
var {baz,foo,bar}={foo:"aaa",bar:"bbb"};
//上面是这个的简写形式:var {baz:baz,foo:foo,bar:baz}={foo:"aaa",bar:"bbb"};
console.log(baz); //undefined;
console.log(foo); //aaa
console.log(bar); //bbb
2、变量名与属性名不同名
var {foo:baz}={foo:"aaa",bar:"bbb"};
console.log(baz); //变量是baz,模式是foo```
###### 3、对于let和const而言,变量不能重新声明,一旦赋值的变量以前生命过就会报错
let foo;
let {foo}={foo:1};//报错
###### 4.对象的默认值生效的条件是对象的属性值严格等于undefined
var {x=3}={x:undefined};
console.log(x); //3
var {y=3}={y:null};
console.log(y) //null
###### 5.已经声明过的变量用于赋值解构需要使用圆括号
var x;
({x}={x:1});
#### 三、字符串的解构赋值:字符串也可以进行解构赋值。因为字符串可以被转换成一个类似数组的对象
const [a,b,c,d,e]='hello';
console.log(a); //h
console.log(b); //e
console.log(c); //c
console.log(d); //d
console.log(e); //e
#### 四、变量赋值解构的用途
######1.交换变量的值:不用像以前那样麻烦,还需要定义一个中间变量来存取变量的值
var x=1,y=2;
[x,y]=[y,x];
console.log(x); //2
console.log(y); //1
###### 2.从函数返回多个值
####### 2-1返回一个数组:es5中只能定义一个变量去存取返回的数组,然后通过这个变量去访问这个返回的数组的值,而现在可以直接访问这个数组的值
function example(){
return [1,2,3];
}
var [a,b,c]=example();
console.log(a) //1```
####### 2-2返回一个对象:可以直接取得返回对象里的变量值
function example(){
return {
foo:1,
bar:2
}
};
var {foo,bar}=example();
console.log(foo); //1
3、函数参数的定义
####### 3-1参数是有次序的值
function f([x,y,z]){
console.log(x);
}
f([1,2,3]) //1
####### 3-2参数是一组无次序的值
function f({x,y,z}){
console.log(x);
}
f({z:3,y:2,x:3}) //3
4、提取json数据
var jsonData={
id:42,
status:"ok",
data:[854,222]
}
let {id,status,data:number}=jsonData;
console.log(id,status,number); //42,"ok",[854,222]
5、遍历Map结构
var map=new Map();
map.set('first','hello');
map.set('second','world');
for(let [key,value] of map){
console.log(key+" is "+value)
}
//first is hello
//second is world
总结:变量的解构赋值在项目中常常能够用到,他能够给我们带来许多的便利,可以提高工作效率。