可选链操作符( ?. )
允许读取位于连接对象链深处的属性的值,而不必明确验证链中的每个引用是否有效。?. 操作符的功能类似于 . 链式操作符,不同之处在于,在引用为空(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可选链操作符 (?.)相关推荐

  1. JS可选链操作符 (?.)的使用

    允许读取位于连接对象链深处的属性的值,而不必明确验证链中的每个引用是否有效. ?. 操作符的功能类似于 . 链式操作符,不同之处在于,在引用为空(nullish ) (null 或者 undefine ...

  2. js - - - - - 可选链操作符报错?可选链操作符 lodash

    可选链操作符报错? 关于可选链操作符,之前写过一篇文章,[关于可选链操作符(?.)],如今旧项目又遇到新问题! 究其根本,要么是因为浏览器缓存.版本问题,要么是因为各种依赖的版本不支持es7新语法问题 ...

  3. vue2.0 使用可选链操作符

    一.介绍ES6中js的常用运算符 ES6中js的运算符(?..?:.? ?.? ?=.),讲的很详细 1.空值合并操作符( ?? ) 空值合并操作符( ?? )是一个逻辑操作符,当左侧的操作数为 nu ...

  4. ES6 可选链 操作符

    一. ?. 可选链操作符(?.)允许读取位于连接对象链深处的属性值,而不必明确验证链中的每个引用是否有效. let nestedProp = obj.first && obj.firs ...

  5. 【ES11(2020)】可选链操作符和空值合并运算符

    可选链操作符 Optional chaining 可选链操作符( ?. )允许读取位于连接对象链深处的属性的值,而不必明确验证链中的每个引用是否有效.?.操作符的功能类似于.链式操作符,不同之处在于, ...

  6. ES11新特性_可选链操作符---JavaScript_ECMAScript_ES6-ES11新特性工作笔记064

    然后我们去看一下es11提供的这个可选链操作符 可以看到如果我们有个main方法,然后有个config参数 然后我们调用这个main方法 然后写入,db和cache,传入这个对象. 然后我们之前调用的 ...

  7. 【vue-cli】使用es6的可选链?.操作符报错Module parse failed解决记录

    使用场景:发现项目有些旧代码多层调用某个对象的属性,由于目标对象可能没那个属性,就导致报错,之前研究es6新特性时发现可以用?.来判断某个对象是否有某个属性来赋值. 测试源代码: var a = {n ...

  8. ES6+ 可选链操作符

    1. 前言 在 ES5 中对于安全地访问对象的深嵌套属性时,首先检查它的上一个属性是否存在,然后才能获取属性的值,否则就会报错: var obj = {} console.log(obj.a) // ...

  9. 关于可选链操作符(?.)

    javaScript越更新,越贴近.方便开发者. 大家肯定写过类似的语法: let length = (res && res.data && res.data.leng ...

最新文章

  1. python在当前目录创建txt文件-python-在目录中创建多个文本文件的字数字...
  2. Struts2的国际化(一)-国际化资源文件的配置及国际化信息的访问
  3. 第三节 计算机体系结构,计算机系统结构 第三节 输入输出系统.pdf
  4. angularjs 结构的两种写法(2)
  5. iOS网络编程-ASIHTTPRequest框架同步请求
  6. python加密敏感信息_仅需10行代码,使用python加密用户敏感数据
  7. 张志华:机器学习的发展历程及启示
  8. 解题报告 『[Poetize6]IncDec Sequence(差分)』
  9. Mysql 的 Explain性能分析
  10. cad2014卡顿的解决方法_cad卡顿解决办法(cad卡顿怎么解决)
  11. 《UNIX环境高级编程》笔记 第十章-信号
  12. Fragment和Activity之间的通信
  13. 小白学习性能随笔记1
  14. 深度搜索----深度搜索解决数独问题
  15. 怎么知道是否已经被好友删了微信?
  16. Qt5.12 QML——TextMetrics字体长度的测量指标
  17. unittest控制case执行顺序
  18. windows压缩tar.gz tar.xz
  19. ogr2ogr导入导出数据。
  20. 一文解析光纤收发器的三大应用场景

热门文章

  1. matlab 文字版,MATLAB图书合集×110本免费奉送(All MATLAB Books Collection)文字版[PDF]
  2. EventBus的介绍
  3. 阿里云海外服务器网络评测
  4. gtx1070显卡 linux,Ubuntu 16.04下Nvidia 显卡驱动安装
  5. 基于Android O8.1的ffmpeg NDK 开发 - 2 - APP显示ffmpeg所支持协议,编解码,过滤器,格式,配置等信息
  6. ofo共享单车和摩拜单车背后的物联网技术分析
  7. 文墨绘学艺术学堂邀请中国书法学会副会长锻铁林弘扬中国“正统书法”
  8. pcie读写ddr_5.3 存储器、I/O和配置读写请求TLP
  9. Leetcode困难之1225.报告系统状态的连续日期
  10. java wed高德地图开发_java接入高德地图常用WEB API