1. 允许读取位于连接对象链深处的属性的值,而不必明确验证链中的每个引用是否有效。
  2. ?. 操作符的功能类似于 . 链式操作符,不同之处在于,在引用为空(nullish ) (null 或者 undefined) 的情况下不会引起错误,该表达式短路返回值是 undefined。
  3. 与函数调用一起使用时,如果给定的函数不存在,则返回 undefined。

语法:
obj?.prop
obj?.[expr]
arr?.[index]
func?.(args)

可选链操作符( ?. )允许读取位于连接对象链深处的属性的值,而不必明确验证链中的每个引用是否有效。?. 操作符的功能类似于 . 链式操作符,不同之处在于,在引用为空(null 或者 undefined) 的情况下不会引起错误,该表达式短路返回值

let a;
let b = a?.name;

只有当a存在,同时a具有name属性的时候,才会把值赋给b,否则就会将undefined赋值给b.重要的是,不管a存在与否,这么做都不会报错.

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 ...

  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. 我的第三个网页制作:b、i、s、u、sub、sup标签的使用
  2. 【控制】《多智能体系统的协同群集运动控制》陈杰老师-第9章-多任务约束下多智能体协同编队控制
  3. Openssl asn1parse命令
  4. 给js文件加一些参数
  5. java netbeans 教程_NetBeans 教程
  6. jfinal poi
  7. 矩阵sum_Matlab-sum与cumsum函数
  8. 基于对比学习(Contrastive Learning)的文本表示模型为什么能学到语义相似度?
  9. [C#] C#访问数据库的代码(Access版本)
  10. Single Number 只出现一次的数字 python实现 - ...
  11. Java 使用OpenCV进行颜色识别
  12. 2018的趋势与展望(下)——记罗振宇“时间的朋友2017”跨年演讲
  13. Python的RSA签名
  14. [渝粤教育] 重庆工商职业学院 生活中的大数据 参考 资料
  15. TIME_WAIT和CLOSE_WAIT区别
  16. 遥感影像条带噪声去除
  17. 低版本android无法连接iPhone手机个人热点问题
  18. 使用servlet获得客户端与服务器的信息
  19. Java设计模式【1】
  20. 人人都要懂的代码重构

热门文章

  1. 腾讯云SSL证书申请流程!
  2. 无线传感网络 --ZigBee3-1 系统睡眠唤醒
  3. 基于JAVA学科竞赛管理系统计算机毕业设计源码+系统+lw文档+部署
  4. 开放式耳机有什么好处,分享几款高畅销的开放式耳机
  5. [转]程序员常用不常见很难得的地址大全,转来自己用
  6. HTML-表格跨行跨列
  7. 仿苹果AppStore 环形下载进度条
  8. 【北风的第二次任务】
  9. 区块链支付,跨境支付新的解决方案
  10. 李娜《独自上场》读后