序言

ES6允许按照一定模式从数组和对象中提取值,然后对变量进行复制,这被称为解构(Destructuring)

数组的解构赋值

基本用法

像上面的例子,可以从数组中提取值,按照对应位置对变量赋值,这种写法属于“模式匹配”,只要等号两边的模式相同,左边的变量就会被赋予对应的值,如果解构不成功,变量的值就等于undefined

像上面因为模式并不匹配,所以a,b,c变量并没有解析成功,为undefined
还有一种情况是不完全解构,即等号左边的模式只匹配一部分的等号右边的数组

事实上,只要某种数据结构具有Iterator接口,都可以采用数组形式的解构赋值。具体关于Iterator接口,会在后面进行详细解释

默认值

解构赋值允许指定默认值,但是默认值只在没有赋到值(即为undefined的情况下)生效,如果是null,默认值不生效,因为ES6内部是使用严格相等运算符(===)来判断一个位置是否有值的,null不严格等于undefined,默认值是不会生效的

如果默认值是一个表达式,那么这个表达式是惰性求值的,即只有在用到时才会求值
默认值可以引用解构赋值的其他变量,但该变量必须已经声明

对象的解构赋值

基本用法

对象的解构与数组有一个重要的不同。数组的元素是按次序排列的,变量的取值是由它的位置决定的;而对象的属性没有次序,变量必须与属性同名才能取到正确的值,总而言之,对象的解构赋值的内部机制是先找到同名属性,然后再赋值给对应的变量
同学们可以看下下面的例子体会一下

let { bar, foo} = { foo: 'aaa', bar: 'bbb' };
foo // 'aaa'
bar // 'bbb'
var { foo: baz} = { foo: 'aaa', bar: 'bbb' };
// 等价于baz = 'aaa';

上例中的第二个解构赋值,真正被赋值的是后者,而不是前者,foo是匹配的模式,baz才是变量,所以要注意对象的解构赋值冒号前的作为模式,只用作匹配,不能被赋值,下面给个稍微复杂的例子,同学们自己结合上面说的理解一下

这里再次提醒一下,冒号前面的都是模式,不会被解构赋值,只是用于解构赋值的匹配

默认值

默认值和数组的解构赋值类似,需要对象的属性值严格等于undefined才会生效

字符串的解构赋值

字符串也可以解构赋值,这是因为此时字符串被转换成了一个类似数组的对象。类似数组的对象都有一个length属性,因此还可以对这个属性进行解构赋值

数值和布尔值的解构赋值

解构赋值的规则是,只要等号右边的值不是对象或数组,就先将其转为对象。

因为123不是对象或数组,所以转化为对象,toStr就赋值了Number.toString()方法。
由于undefined和null无法转为对象,所以对它们进行解构赋值时都会报错

函数参数的解构赋值

圆括号问题

ES6的规则是,只要有可能导致解构的歧义,就不得使用圆括号,但是这条规则实际上不那么容易辨别,处理起来相当麻烦。因此建议,只要有可能,就不要在模式中放置圆括号

不能使用圆括号的情况

变量声明语句

函数参数

可以使用圆括号的情况

可以使用圆括号的情况只有一种:赋值语句的非模式部分可以使用圆括号

解构赋值的用途

交换变量的值

let x = 1, y = 2;
[x, y] = [y, x]; //交换x,y的值

从函数返回多个值

function example(){return [1, 2, 3];
}
let [a, b, c] = example();

函数参数的定义

function f([x, y, z]){...}
f([1, 2, 3]);

提取JSON数据

let jsonData = {id: 42,status: "OK",data: [867, 5309]
};
let {id, status, data: number} = jsonData;

遍历Map结构

任何部署了Iterator接口的对象都可以用for…of循环遍历。Map结构原生支持Iterator接口,配合变量的解构赋值获取键名和键值非常方便

var map = new Map();
for(let [key, value] of map){...}

输入模块的指定方法

const {SourceMapConsumer, SourceNode} = require('source-map');

小伙伴们今天的学习就到这里了,如果觉得本文对你有帮助的话,欢迎转发,评论,收藏,点赞!!!
每天学习进步一点点,就是领先的开始。如果想继续提高,欢迎关注我,或者关注公众号”祯民讲前端“。大量前端技术文章,面试资料,技巧等助你更进一步!

http://weixin.qq.com/r/phC2rt3ED4BwrZnN90W0 (二维码自动识别)

json解析 子类和父类同名属性如何赋值_想学变量的解构赋值?看完这一篇就够了...相关推荐

  1. python子类与父类属性重名_9.6.子类调用父类同名属性和方法

    # 子类调用父类同名属性和方法 ~~~ class Master(object): def __init__(self): self.kongfu = "古法烤冷面配方" # 实例 ...

  2. Python OOP:继承、单继承、多继承、__mro__、子类重写父类同名属性和方法、子类调用父类同名属性和方法、多层继承、super()、私有(实例)属性和方法、获取修改私有属性值、私有类属性

    一.继承 Python⾯向对象的继承指的是多个类之间的所属关系,即⼦类默认继承⽗类的所有属性和⽅法. 继承作用:继承可以使用现有类的所有功能,并在无需重新编写原来的类的情况下对这些功能进行扩展. 在P ...

  3. ES6语法~解构赋值、箭头函数、class类继承及属性方法、map、set、symbol、rest、new.target、 Object.entries......

    2015年6月17日 ECMAScript 6发布正式版本 前面介绍基本语法,  后面为class用法及属性方法.set.symbol.rest等语法. 一.基本语法:  1.         定义变 ...

  4. js进阶--JSON,克隆,解构赋值,class类与箭头函数 06

    文章目录 Array.from(类数组) sort中的a,b代表的每一项 JSON 浅克隆 深克隆 es6 let const 对于对象中属性名与属性值一样的只写一个就可以 解构赋值 数组的解构赋值 ...

  5. 利用java反射机制,子类从父类拷贝属性--解决信息修改类设计的模式

    用例场景:在一个商户管理系统中,操作人员对一个已注册的商户进行修改,这就触发了一个商户修改的工作流,修改提交后,修改的商户信息和原商户信息会传递到审核人员的窗口进行审核,审核完毕后,新商户信息更新,同 ...

  6. js之删除对象中的属性——delete、es6解构赋值、自执行匿名函数

    js之删除对象中的属性--delete.es6解构赋值.自执行匿名函数 实例 const person = {name: '李世民',gender: 'male',age: 24 };// 删除目标对 ...

  7. C++ 面试题:子类与父类同名变量

    今天面试时被问到C++的子类与父类有同名变量时,C++会如何处理. 示例代码如下: class A {public:int a;A(){ a=0; } }; class B:public A{publ ...

  8. java反射获取子类或者父类的属性值

    方法介绍 1.获取所有属性 private static List<Field> getAllField(Class<?> class1){List<Field> ...

  9. python子类调用父类内属性的方法

    每个编程语言,都有固定的使用格式(称为语法)以及精确的含义(称为语义) 编程语言分类: 编译型语言:开发完成以后需要将所有的源代码都转换成可执行程序. 解释型语言:每次执行程序都需要一边转换一边执行, ...

最新文章

  1. debug:g2o cmake时报错“Qt5 not found. Install it and set Qt5_DIR accordingly
  2. 给你一个亿的keys,Redis如何统计?
  3. 从官网下载的python包如何使用-如何下载python包
  4. 6174问题 --ACM解决方法
  5. python删除列表空元素_Python 如何删除列表中的空值
  6. VNPY思维导图架构
  7. 190102每日一句
  8. python定义复数矩阵_python矩阵运算,转置,逆运算,共轭矩阵实例
  9. ddwrt php,DD-WRT官方支持设备列表_ddwrt
  10. 必备的查询网址:查征信、婚姻、交友借钱明明白白
  11. Greenplum 6 磁盘配额管理工具“Diskquota”
  12. java 里面 todo 作用
  13. python读取tiff图像,浅谈python下tiff图像的读取和保存方法
  14. IGRP中的RTP、Neighbor Discovery协议及Time总结
  15. whatsns与tipask_tipask重大安安全漏洞之最佳答案bug修复
  16. Presto 在美图的实践
  17. python glob.glob使用
  18. 百度站长平台网站验证图文教程
  19. 用TIA Portal+S7Client暴力破解西门子S7-300/400密码
  20. 水利RTU遥测终端实现化工园区水污染在线监测

热门文章

  1. poj1655Multiplication Puzzle
  2. 王志成/王之泰《面向对象程序设计(java)》第十一周学习总结
  3. 羡慕女设计师啊,天生色感好!
  4. Swift中GCD与NSOperation相关
  5. UGUI 帧动画插件
  6. 2_MVC+EF+Autofac(dbfirst)轻型项目框架_用户权限验证
  7. StarlingMVC Framework 原理。。。
  8. 史上最全,100+大数据开源处理工具汇总
  9. 代码注释规范-google版本
  10. DWORD dwSendTime =::GetTickCount();