一起养成写作习惯!这是我参与「掘金日新计划 · 4 月更文挑战」的第1天,点击查看活动详情。
前言
最近接触到了新的技术,然后发现很多基础知识都还不扎实(其实以前只是浏览过,知道有这么个东西,自己也没怎么运用过)。所以呢趁现在刚来,还没安排很多活,先抽空把基础补一补。就从ES6开始吧!(这是一个菜鸡的自我救赎,各位看官嘴下留情!)
参考来源
- ES6 解构赋值 www.runoob.com/w3cnote/dec…
- 阮一峰的ECMAScript6入门 es6.ruanyifeng.com/#docs/destr…
分类
所谓的解构赋值,我的理解是它通过采用模式匹配("解构"),进行对赋值运算符的一种拓展("赋值")。阮一峰的教程里分成了如下几类进行阐述,对我来说更容易记忆和理解,所以咱们也按这个分类进行总结!对于每一种用法教程中给出的案例,我们都实际执行一下,有图有真相才能加深印象!
数组的解构赋值
基础用法
允许嵌套
允许忽略
允许剩余运算符
允许不完全解构
允许默认值
只有对应位置严格等于(===)undefined,变量默认值才会生效!
解构不成功
解构不成功时对应变量的值就会是undefined!
报错情况
也就是说等号右边必须是可以遍历的结构!
数据解构赋值小结
核心思想就是模式匹配,写的时候注意对应;
解构可以完全解构也可以不完全解构,允许给变量赋默认值,如果对应位置不是undefined默认值就不会生效;
解构失败的对应变量值就是undefined;
等号右侧必须是可以遍历的结构,否则会报错,如上述报错图示。
对象的解构赋值
基础用法
和数组的有序匹配不同,对象是解构赋值是按变量和属性名的对应进行的。
- 对象的属性赋值给新的非同名变量:
和上一条呼应,如果变量名和属性名对不上,则变量赋值为undefined;如果要赋值的变量名和属性名都对不上,要按这种写法,可以看出来这个赋值的机制是先查找到相应的属性名,然后再把对应的值赋给变量。
支持嵌套、支持忽略、支持不完全解构、支持剩余运算符、支持默认值(和数组相似)
支持对数组进行对象属性的解构
支持取到继承的属性
对象解构赋值小结
- 和数组相似之处
支持嵌套、支持忽略、支持不完全解构、支持剩余运算符、支持默认值;
默认值生效的条件是对应的属性值严格等于undefined;
赋值失败变量值为undefined; - 和数组不同之处
数组的解构赋值取决于位置次序,对象的解构赋值取决于变量和属性名的对应;
对象的解构赋值可以取到继承的属性;
可以把数组作为特殊的对象进行解构赋值;
字符串的解构赋值
这时字符串被转换为了类似数组的对象;
类似数组的对象的length属性可以进行解构赋值;
数值和布尔值的解构赋值
解构赋值的规则是等号右边如果不是对象就先转换为对象,数值和布尔值的包装对象都有toString属性,所以可以进行解构赋值;undefined和null无法转为对象,不能进行解构赋值,所以会报类型错误;执行结果参考上图;
函数参数的解构赋值
第一种写法是函数的参数是对象,对这个对象进行解构然后给变量x,y赋值,解构失败x,y就赋默认值;
第二种写法是对函数的参数指定了默认值为{x:0,y:0};
用途
交换变量的值
取函数的返回值
取JSON对象中的数据
遍历map结构
综述
纸上得来终觉浅,绝知此事要躬行!开始学的时候就要边学边敲,理解了之后要经常运用!以上就是我学习ES6解构赋值的相关总结,只是摘取了我觉得不那么偏的小知识点和大家分享,适合像我一样的新手阅读,更多请各位移步官网~(纯纯想薅羊毛,谢谢各位!)