从ES6的解构赋值开始~

162 阅读4分钟

一起养成写作习惯!这是我参与「掘金日新计划 · 4 月更文挑战」的第1天,点击查看活动详情

前言

最近接触到了新的技术,然后发现很多基础知识都还不扎实(其实以前只是浏览过,知道有这么个东西,自己也没怎么运用过)。所以呢趁现在刚来,还没安排很多活,先抽空把基础补一补。就从ES6开始吧!(这是一个菜鸡的自我救赎,各位看官嘴下留情!)

参考来源

分类

所谓的解构赋值,我的理解是它通过采用模式匹配("解构"),进行对赋值运算符的一种拓展("赋值")。阮一峰的教程里分成了如下几类进行阐述,对我来说更容易记忆和理解,所以咱们也按这个分类进行总结!对于每一种用法教程中给出的案例,我们都实际执行一下,有图有真相才能加深印象!

数组的解构赋值

基础用法

image.png

允许嵌套

image.png

允许忽略

image.png

允许剩余运算符

image.png

允许不完全解构

image.png

image.png

允许默认值

image.png 只有对应位置严格等于(===)undefined,变量默认值才会生效!

解构不成功

image.png 解构不成功时对应变量的值就会是undefined!

报错情况

image.png 也就是说等号右边必须是可以遍历的结构!

数据解构赋值小结

核心思想就是模式匹配,写的时候注意对应;
解构可以完全解构也可以不完全解构,允许给变量赋默认值,如果对应位置不是undefined默认值就不会生效;
解构失败的对应变量值就是undefined;
等号右侧必须是可以遍历的结构,否则会报错,如上述报错图示。

对象的解构赋值

基础用法

image.png 和数组的有序匹配不同,对象是解构赋值是按变量和属性名的对应进行的。

  • 对象的属性赋值给新的非同名变量: image.png 和上一条呼应,如果变量名和属性名对不上,则变量赋值为undefined;如果要赋值的变量名和属性名都对不上,要按这种写法,可以看出来这个赋值的机制是先查找到相应的属性名,然后再把对应的值赋给变量。
支持嵌套、支持忽略、支持不完全解构、支持剩余运算符、支持默认值(和数组相似)

image.png

image.png

支持对数组进行对象属性的解构

image.png

支持取到继承的属性

image.png

对象解构赋值小结
  • 和数组相似之处 支持嵌套、支持忽略、支持不完全解构、支持剩余运算符、支持默认值;
    默认值生效的条件是对应的属性值严格等于undefined;
    赋值失败变量值为undefined;
  • 和数组不同之处 数组的解构赋值取决于位置次序,对象的解构赋值取决于变量和属性名的对应;
    对象的解构赋值可以取到继承的属性;

可以把数组作为特殊的对象进行解构赋值;

字符串的解构赋值

image.png 这时字符串被转换为了类似数组的对象;

image.png 类似数组的对象的length属性可以进行解构赋值;

数值和布尔值的解构赋值

image.png 解构赋值的规则是等号右边如果不是对象就先转换为对象,数值和布尔值的包装对象都有toString属性,所以可以进行解构赋值;undefined和null无法转为对象,不能进行解构赋值,所以会报类型错误;执行结果参考上图;

函数参数的解构赋值

image.png

image.png

第一种写法是函数的参数是对象,对这个对象进行解构然后给变量x,y赋值,解构失败x,y就赋默认值;
第二种写法是对函数的参数指定了默认值为{x:0,y:0};

用途

交换变量的值

image.png

取函数的返回值

image.png

取JSON对象中的数据

image.png

遍历map结构

image.png

综述

纸上得来终觉浅,绝知此事要躬行!开始学的时候就要边学边敲,理解了之后要经常运用!以上就是我学习ES6解构赋值的相关总结,只是摘取了我觉得不那么偏的小知识点和大家分享,适合像我一样的新手阅读,更多请各位移步官网~(纯纯想薅羊毛,谢谢各位!)