JS可选链操作符 (?.)
可选链操作符( ?. )
允许读取位于连接对象链深处的属性的值,而不必明确验证链中的每个引用是否有效。?. 操作符的功能类似于 . 链式操作符,不同之处在于,在引用为空(nullish ) (null 或者 undefined) 的情况下不会引起错误,该表达式短路返回值是 undefined。与函数调用一起使用时,如果给定的函数不存在,则返回 undefined。
当尝试访问可能不存在的对象属性时,可选链操作符将会使表达式更短、更简明。在探索一个对象的内容时,如果不能确定哪些属性必定存在,可选链操作符也是很有帮助的。(from MDN)
语法:
obj?.prop
obj?.[expr]
arr?.[index]
func?.(args)
1.通过连接的对象的引用或函数可能是 undefined 或 null 时,可选链操作符提供了一种方法来简化被连接对象的值访问。
const obj = {info: {name: 'zhangsan',age: 20},details: {}
}let someBody = obj.info?.name // zhangsan
let otherInfo = obj.infos?.name // 返回 undefined 而没有报错,保证程序继续执行,而不是中断
2.可选链与函数调用
// 函数调用时如果被调用的方法不存在,
// 使用可选链可以使表达式自动返回 undefined 而不是抛出一个异常
let data = someInterface.someMethod?.()
3.可选链和表达式
// 当使用中括号与属性名的形式来访问属性时,也可以使用可选链操作符
let nestedProp = obj?.['prop' + 'Name']
4.可选链不能用于赋值语句:
const someObj = {}
someObj?.name = "zhangsan" // Uncaught SyntaxError: Invalid left-hand side in assignment
5.可选链访问数组元素
let arr = ['zhangsann', 20, 'male']
let item = arr?.[0]
6.可选链用于短路计算
// 当在表达式中使用可选链时,如果左操作数是 null 或 undefined,表达式将不会被计算
const profile = {name: 'zhangsan',details: {gender: 'Female',age: 20}
}
let add = profile.details?.address?.province // 没有报错返回undefined
7.使用空值合并操作符 和 | 是一个效果
// 空值合并操作符可以在使用可选链时设置一个默认值
let person = {name: "zhangsan",details: { age: 20 }
}
let add = person?.city ?? '默认值';
console.log(add) // '默认值'
JS可选链操作符 (?.)相关推荐
- JS可选链操作符 (?.)的使用
允许读取位于连接对象链深处的属性的值,而不必明确验证链中的每个引用是否有效. ?. 操作符的功能类似于 . 链式操作符,不同之处在于,在引用为空(nullish ) (null 或者 undefine ...
- js - - - - - 可选链操作符报错?可选链操作符 lodash
可选链操作符报错? 关于可选链操作符,之前写过一篇文章,[关于可选链操作符(?.)],如今旧项目又遇到新问题! 究其根本,要么是因为浏览器缓存.版本问题,要么是因为各种依赖的版本不支持es7新语法问题 ...
- vue2.0 使用可选链操作符
一.介绍ES6中js的常用运算符 ES6中js的运算符(?..?:.? ?.? ?=.),讲的很详细 1.空值合并操作符( ?? ) 空值合并操作符( ?? )是一个逻辑操作符,当左侧的操作数为 nu ...
- ES6 可选链 操作符
一. ?. 可选链操作符(?.)允许读取位于连接对象链深处的属性值,而不必明确验证链中的每个引用是否有效. let nestedProp = obj.first && obj.firs ...
- 【ES11(2020)】可选链操作符和空值合并运算符
可选链操作符 Optional chaining 可选链操作符( ?. )允许读取位于连接对象链深处的属性的值,而不必明确验证链中的每个引用是否有效.?.操作符的功能类似于.链式操作符,不同之处在于, ...
- ES11新特性_可选链操作符---JavaScript_ECMAScript_ES6-ES11新特性工作笔记064
然后我们去看一下es11提供的这个可选链操作符 可以看到如果我们有个main方法,然后有个config参数 然后我们调用这个main方法 然后写入,db和cache,传入这个对象. 然后我们之前调用的 ...
- 【vue-cli】使用es6的可选链?.操作符报错Module parse failed解决记录
使用场景:发现项目有些旧代码多层调用某个对象的属性,由于目标对象可能没那个属性,就导致报错,之前研究es6新特性时发现可以用?.来判断某个对象是否有某个属性来赋值. 测试源代码: var a = {n ...
- ES6+ 可选链操作符
1. 前言 在 ES5 中对于安全地访问对象的深嵌套属性时,首先检查它的上一个属性是否存在,然后才能获取属性的值,否则就会报错: var obj = {} console.log(obj.a) // ...
- 关于可选链操作符(?.)
javaScript越更新,越贴近.方便开发者. 大家肯定写过类似的语法: let length = (res && res.data && res.data.leng ...
最新文章
- python在当前目录创建txt文件-python-在目录中创建多个文本文件的字数字...
- Struts2的国际化(一)-国际化资源文件的配置及国际化信息的访问
- 第三节 计算机体系结构,计算机系统结构 第三节 输入输出系统.pdf
- angularjs 结构的两种写法(2)
- iOS网络编程-ASIHTTPRequest框架同步请求
- python加密敏感信息_仅需10行代码,使用python加密用户敏感数据
- 张志华:机器学习的发展历程及启示
- 解题报告 『[Poetize6]IncDec Sequence(差分)』
- Mysql 的 Explain性能分析
- cad2014卡顿的解决方法_cad卡顿解决办法(cad卡顿怎么解决)
- 《UNIX环境高级编程》笔记 第十章-信号
- Fragment和Activity之间的通信
- 小白学习性能随笔记1
- 深度搜索----深度搜索解决数独问题
- 怎么知道是否已经被好友删了微信?
- Qt5.12 QML——TextMetrics字体长度的测量指标
- unittest控制case执行顺序
- windows压缩tar.gz tar.xz
- ogr2ogr导入导出数据。
- 一文解析光纤收发器的三大应用场景
热门文章
- matlab 文字版,MATLAB图书合集×110本免费奉送(All MATLAB Books Collection)文字版[PDF]
- EventBus的介绍
- 阿里云海外服务器网络评测
- gtx1070显卡 linux,Ubuntu 16.04下Nvidia 显卡驱动安装
- 基于Android O8.1的ffmpeg NDK 开发 - 2 - APP显示ffmpeg所支持协议,编解码,过滤器,格式,配置等信息
- ofo共享单车和摩拜单车背后的物联网技术分析
- 文墨绘学艺术学堂邀请中国书法学会副会长锻铁林弘扬中国“正统书法”
- pcie读写ddr_5.3 存储器、I/O和配置读写请求TLP
- Leetcode困难之1225.报告系统状态的连续日期
- java wed高德地图开发_java接入高德地图常用WEB API