解构:使数据访问更便捷

在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

 

解构参数的默认值,直接在参数后加等号指定

 

 当第三个参数为可选的,若没有传入,仍然会报错,还是得加空对象作为默认值

但这里建议对于对象类型的解构参数,为其赋予相同解构的默认参数

 

代码变得完整了,第一个对象字面量是解构参数,第二个为解构参数的默认值。但是这会造成代码冗余

可以把默认值提取到一个独立对象中,并且使用该对象作为解构和默认参数的一部分,从而消除这些冗余

 

posted @ 2018-10-16 11:29  你今天学习了吗  阅读(206)  评论(0)    收藏  举报