一.数组的解构赋值
1.结构赋值可以嵌套
var[a,b,c,[d,e,[f,g]]]=[1,2,3,[4,5,[6,7]]];

2.不完全解构
var [a,b,c]=[1,2];

可以看到赋值不成功,变量的值为undefind,相当于只声明了c变量但是没有赋值。
3.允许设置默认值
var [a,b,c=5]=[1,2];

变量c已经指定了默认值为5,即使右侧没有与之对应的值赋给它也没关系,他可以成功赋值5,如果想覆盖默认值5,只需赋一个有效值。
var [a,b,c=5]=[1,2,3];

以上是数组的解构赋值,除了利用数组可以解构赋值外,用JSON对象也可以。
二.对象的解构赋值
var{b:a}={'b':2}

对象的解构赋值的内部机制是想找到同名属性,然后再赋值给对应的变量,真正被赋值的是前者而不是后者。
var{b}={'b':2}

相当于下面这个写法的简写
var {b:b}={'b':2}

var {foo:baz}={'foo':2}

上面的代码中,foo是匹配的模式,baz才是变量,真正被赋值的是baz,而不是模式foo。
对象的解构赋值的用法与数组的二结构赋值的用法类似:
1.对象的解构赋值也可以嵌套
var {a:{b}}={"a":{"b":5}}

此时a是模式,不是变量,因此不会被赋值,如果a也要作为变量赋值,可以写成下面这样
var {a,a:{b}}={"a":{"b":5}}

2.可以指定默认值
var {a,b=2}={"a":1}

三.字符串的解构赋值
字符串也可以解构赋值。这是因为此时字符串被转换成了一个类似数组的对象。
var [a,b,c,d,e]="hello";

类似数组的对象还有一个Length属性,因此还可以对这个属性进行解构赋值。
网友评论