ES6允许按照一定的模式,从数组和对象中提取值,对变量进行赋值,这被称为解构赋值
1.数组解构赋值
普通数组依照位置一次进行赋值
嵌套数组也是一次进行赋值
注意点:
如果解构不成功就为undefined
结构赋值触发默认值的情况(1.左边有值,右边为空 2.左边赋值了,右边赋值为undefined·)
如果默认值是一个表达式,那么这个表达式是惰性求值,只有在用到的时候,才会求值
默认值可以引用其他变量,但是顺序为先解构,在触发默认值
只要某种数据结构具有Iterator接口,都可以采用数组形式的结构赋值
2.对象结构赋值
对象解构赋值,根据对象属性名进行解构
属性名解构不成功也是undefined
其中注意解构的嵌套赋值
这里可以看出,对象的结构赋值格式为:
{a:a=3,b:b=4}={a:a=2}
可以简写为
{a=3,b=4} = {a=2}
所以要分清楚,这个值到低赋在哪个上面的
即对于已经声明的变量赋值,要用一个圆括号括起来
3.字符串的结构赋值
可以将字符串拆分依次赋值
也可以将字符串的长度进行赋值
4.数值和布尔值的结构赋值
结构赋值时,如果等号右边时数值和布尔值,则会先转为对象
let {toString: s} = 123;
s === Number.prototype.toString // true
let {toString: s} = true;
s === Boolean.prototype.toString // true
5.函数解构赋值
主要还是用来进行函数参数的传递
主要就是x=0,y=0和x:0,y:0的区别
6.圆括号问题
一个式子到低是模式,还是表达式,
不使用圆括号的情况:
1.变量声明语句
2.函数参数
3.赋值语句的模式
可以使用圆括号的情况:赋值语句的非模式部分
7.解构赋值的用处:
1.用于交换变量的值
2.从函数返回多个值
3.函数参数的定义
方便地将一组参数与变量名对应起来
4.提取json数据
解构赋值对于提取json对象中的数据,尤其重要
5.函数参数的默认值
6遍历map结构
7.加载模块时,往往需要指定输入哪些方法,解构赋值使得输入语句非常清晰。