解构:使数据访问更便捷

在ES6之前,访问对象等属性值需要写很多类似的代码。解构就是用来解决这个问题的,针对数组和对象。
对象解构:

不要忘记初始化,如果要使用var,let, const 解构声明变量,则必须要提供初始化程序

解构赋值:

对变量进行解构赋值,注意一定要加外括号,因为JS引擎将一对开放的花括号视为代码块,代码块不允许出现在赋值语句左侧

解构赋值表达式的值与表达式右侧的值相等,所以在任何可以使用值的地方都可以使用解构赋值表达式。
解构赋值表达式(也就是=右侧的表达式)如果为null或者undefined会导致程序抛出错误,也就是说
任何尝试读取null或undefined的属性的行为都会触发运行时错误
默认值
使用解构赋值表达式时,如果指定的局部变量名称在对象中不存在,那么这个局部变量就会被赋值为undefined

为非同名局部变量赋值

当使用其他变量名进行赋值时也可以添加默认值,只需要在变量名后面添加等号和默认值即可

嵌套对象解构
与对象字面量语法类似,将对象拆解以获取你想要的信息:

也可以使用一个与对象属性名不同的局部变量名:

node.loc.start 被存储在了新的局部变量localStart中
// 未声明任何变量
数组解构
数组解构比较简单
假如你只想取第三个元素

当通过var,let,const 声明数组解构的绑定时,必须要提供一个初始化程序
解构赋值 用于赋值上下文
不需要用小括号包起来
交换两个变量的值

如果右侧数组解构表达式的值为null或者undefined,则会导致程序出错,和对象解构赋值类似

默认值
数组解构表达式也可以添加默认值

嵌套数组解构

不定参数

数组复制
ES5 中经常使用concat() 和 slice() 方法去克隆数组,
concat() 方法的初衷是连接两个数组,如果不传递参数就会返回当前函数的副本
在ES6 中,可以通过不定参数来克隆数组
不定参数必须为最后一个条目
混合解构

解构参数

缺点: 仅查看函数声明部分,无法辨识函数的预期参数,必须通过阅读函数体才可以确定所有参数的情况
定义为解构参数,则可以更加清晰地了解函数预期传入的参数

使用解构参数的时候必须传入该参数,不然会报错
如果解构参数是必须的,可以忽略这个问题,但如果希望解构参数为可选的,那么就必须为其提供默认值来解决这个问题

第三个参数采用默认值,全部为undefined
解构参数的默认值,直接在参数后加等号指定

当第三个参数为可选的,若没有传入,仍然会报错,还是得加空对象作为默认值
但这里建议对于对象类型的解构参数,为其赋予相同解构的默认参数

代码变得完整了,第一个对象字面量是解构参数,第二个为解构参数的默认值。但是这会造成代码冗余
可以把默认值提取到一个独立对象中,并且使用该对象作为解构和默认参数的一部分,从而消除这些冗余


浙公网安备 33010602011771号