对象解构赋值
时间:2020-05-22
本文章向大家介绍对象解构赋值,主要包括对象解构赋值使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
let {aa,bb}={aa:"111",bb:"222"};//aa="111",bb="222"
1、对象的解构与数组有一个重要的不同。数组的元素是按次序排列的,变量的取值由它的位置决定;而对象的属性没有次序,变量必须与属性同名,才能取到正确的值。
let {aa,bb,dd}={bb:"222",aa:"111",cc:"333"};//aa="111",bb="222",dd=undefined
2、如果解构失败,变量的值等于undefined
。
let {aa}={bb:"111"};//aa=undefined
3、对象的解构赋值,可以很方便地将现有对象的方法,赋值到某个变量。
// 例一 let { log, sin, cos } = Math; // 例二 const { log } = console; log('hello') // hello
上面代码的例一将Math
对象的对数、正弦、余弦三个方法,赋值到对应的变量上,使用起来就会方便很多。例二将console.log
赋值到log
变量。
4、如果想要变量名和属性名不一样,则可以写成下面那样
let {aa:a,bb:b,cc:c}={aa:"111",bb:"222"};//a="111",b="222",c=undefined,如果引用aa、bb或cc则会报错:error:aa(bb、cc) is not defined
------------------------------------------------------------------------------ let obj={aa:"111",bb:"222"}; let {aa:a,bb:b}=obj;//a="111",b="222"
这实际上说明,对象的解构赋值是下面形式的简写
let { aa: aa, bb: bb} = { aa: '111', bb: '222' };
也就是说,对象的解构赋值的内部机制,是先找到同名属性,然后再赋给对应的变量。
前者是匹配模式,后者是变量,真正被赋值的是后者,而不是前者,而前者的作用是找到对象相同名字的属性。
5、与数组一样,解构也可以用于嵌套结构的对象。
let obj={ p:[ "aaa",{bbb:"222"} ] }; let {p:[a,{bbb:b}]}=obj;//a="aaa",b="222"
p和bbb都是模式,不是变量,因此不会被赋值。如果想要p和bbb也赋值,则可以写成下面那样
let obj={ p:[ "aaa",{bbb:"222"} ] }; let {p,p:[a,{bbb,bbb:b}]}=obj;//a="aaa",b和bbb="222",p=["aaa",{bbb:"222"}]
6、嵌套赋值
let obj={}; let arr=[]; ({aa:obj.prop,bb:arr[0]}={aa:"111",bb:222});//obj={prop:"111"},arr=[222]
如果解构模式是嵌套的对象,而且子对象所在的父属性不存在,那么将会报错。
let {aa:{bb}}={aa:111};//bb=undefined let {cc:{dd}}={dd:111,ee:222};//报错,因为cc在对象中不存在并且又要取子属性dd
7、对象的解构赋值可以取到继承的属性
const obj1 = {}; const obj2 = { foo: "bar" }; Object.setPrototypeOf(obj1, obj2); const { foo } = obj1;//foo="bar"
上面代码中,对象obj1
的原型对象是obj2
。foo
属性不是obj1
自身的属性,而是继承自obj2
的属性,解构赋值可以取到这个属性。
8、默认值
let {a=1}={};//a=1 let {b,c=3}={b:2};//b=2,c=3 let {d:e=4}={};//e=4 let {f:g=5}={f:6};//g=6
默认值生效的条件是,对象的属性值严格等于undefined
。
let {a=3}={a:undefined};//a=3 let {a=3}={a:null};//a=null
9、将一个已经声明的变量用于解构赋值,必须非常小心
let x; {x} = {x: 1};//报错
上面代码的写法会报错,因为 JavaScript 引擎会将{x}
理解成一个代码块,从而发生语法错误。只有不将大括号写在行首,避免 JavaScript 将其解释为代码块,才能解决这个问题。
// 正确的写法 let x; ({x} = {x: 1});
10、解构赋值允许等号左边的模式之中,不放置任何变量名(虽然毫无意义,但是语法是合法的,可以执行)。因此,可以写出非常古怪的赋值表达式
({} = [true, false]); ({} = 'abc'); ({} = []);
11、数组本质是特殊的对象,因此可以对数组进行对象属性的解构
let arr = [1, 2, 3]; let {0 : f, [arr.length - 1] : l} = arr;//f=1,l=3
原文地址:https://www.cnblogs.com/pzw23/p/12937766.html
- Python标准库(1) — itertools模块
- Linux笔记:使用Vim编辑器
- 一步一步学lucene——(第二步:示例篇)
- 类属性的延迟计算
- 一步一步学lucene——(第三步:索引篇)
- 在Python应用中使用MongoDB
- Python检查xpath和csspath表达式是否合法
- 一步一步学lucene——(第四步:搜索篇)
- Python爬虫代理IP池
- SSDB图形界面管理工具:phpssdbadmin安装部署
- [Go 语言社区] 初始化内存数据--游戏列表数据
- SSDB安装配置记录
- Python标准库笔记(3) — datetime模块
- Django 1.10中文文档-第一个应用Part4-表单和通用视图
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- gin websocket 一对一聊天
- Go 中文和unicode字符之间转换
- Go 加密解密算法总结
- Linux 中几个正则表达式的用法
- embedded.AnnotationConfigEmbeddedWeb ApplicationContext@1e67b872 has been closed already
- Js实现list导出为excel表格
- 宿舍(寝室)管理系统设计与实现(SSM框架 附 详细系统搭建教程、系统演示地址、实现过程、源码)
- Redis get key error
- elastic search 日志不打印问题(root用户惹的祸)
- 起飞 | 应用YOLOV4 - DeepSort 实现目标跟踪
- 如何将elastic search 的健康状态由红色red变为绿色green
- 拥抱K8s系列-01
- elastic search 修改日志级别为warn
- prometheus学习笔记(3)-使用exporter监控mysql
- elasticsearch query里面的slop选项