超级厉害的JavaScript —— ECMAScript 6 标准(3) —— 解构赋值

来源:互联网 发布:宝鸡文理学院网络课程 编辑:程序博客网 时间:2024/05/16 06:59

什么是解构赋值

匹配指定的模式,从数组和对象中提取值(解构),并对变量进行赋值(赋值)。


数组模式

按照对应的顺序位置解构赋值。

let arr = [1,2,3,4,5];let [a,b,c,d] = arr;//a=1,b=2,c=3,d=4

数组嵌套匹配

可以匹配嵌套的数组模式进行解构赋值。

let arr = [1,[2,3],4,5];let [a,b,c,d] = arr;//a=1,b=[2,3],c=4,d=5  没有匹配元素数组的模式,不解构元素数组,并将元素数组直接赋值let [e,[f,g],h] = arr;//e=1,f=2,g=3,h=4  匹配了数组内元素数组的模式,就会将元素数组的值进行解构

默认值

解构赋值允许指定默认值。

let arr = [1,2];let [a,b = 4,c = 3] = arr;//a=1,b=2,c=3

内部使用严格相等运算符(===)判断一个位置是否的等于undefined

let arr = [1,undefined,null];let [a,b = 2,c = 3] = arr;//a=1,b=2,c=null

默认值如果是一个表达式,表达式的求值是惰性求值得,即用到的时候才会求值。

function a(){    console.log("aaa");    return "a"}function b(){    console.log("bbb");    return "b"}let [x = a(),y = b()] = [1];//因为 x 能取值,所以 a 不会执行console.log(x,y);//控制台输出//bbb//1,b

默认值可以引用解构赋值的其他变量,但该变量必须已经声明

let [x = 1 , y = x] = [];       //x = y = 1let [x = 1 , y = x] = [2];      //x = y = 2let [x = 1 , y = x] = [1 , 2];  //x = 1 ; y = 2let [x = y , y = 1] = [];       //ReferenceError

对象模式

按照对应的属性名进行解构赋值。

let { a : a , b : bs} = { a : 1 , b : 2};//a = 1 , bs = 2

如果变量名与属性名相同可以使用简写形式

let { a , b} = { a : 1 , b : 2};//a = 1 , b = 2

也就是说对象解构赋值的模式是{模式 : 变量}属性名需要与模式同名,才会把值赋给变量

默认值

//普通写法let {a : b = 1,x : y = 2 , z} = { a : 3 };//b = 3 ; y = 2 ; z = undefined

这里ax都是模式,by都是变量;模式x找不到对应的属性,所以变量y使用了默认值。而默认的默认值是undefined
也就是说,对不匹配的变量再解构会报错

let {a : {b}} = {};//报错

默认值可以使用简写模式,此时模式和变量同名。

//简写模式let {a = 1,x = 2} = { a : 3 };//a = 3 ; x = 2 ; 

由于数组的本质是特殊的对象,因此可以对数组进行对象属性的解构,其中模式用数字匹配。

字符串、布尔值、数值的解构赋值

对字符串进行解构是会将字符串转化为类似数组的解构;
布尔值和数值则会先转为对象

0 0