JS可选链操作符 (?.)的使用
- 允许读取位于连接对象链深处的属性的值,而不必明确验证链中的每个引用是否有效。
- ?. 操作符的功能类似于 . 链式操作符,不同之处在于,在引用为空(nullish ) (null 或者 undefined) 的情况下不会引起错误,该表达式短路返回值是 undefined。
- 与函数调用一起使用时,如果给定的函数不存在,则返回 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可选链操作符 (?.)的使用相关推荐
- JS可选链操作符 (?.)
可选链操作符( ?. ) 允许读取位于连接对象链深处的属性的值,而不必明确验证链中的每个引用是否有效.?. 操作符的功能类似于 . 链式操作符,不同之处在于,在引用为空(nullish ) (null ...
- 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 ...
最新文章
- 我的第三个网页制作:b、i、s、u、sub、sup标签的使用
- 【控制】《多智能体系统的协同群集运动控制》陈杰老师-第9章-多任务约束下多智能体协同编队控制
- Openssl asn1parse命令
- 给js文件加一些参数
- java netbeans 教程_NetBeans 教程
- jfinal poi
- 矩阵sum_Matlab-sum与cumsum函数
- 基于对比学习(Contrastive Learning)的文本表示模型为什么能学到语义相似度?
- [C#] C#访问数据库的代码(Access版本)
- Single Number 只出现一次的数字 python实现 - ...
- Java 使用OpenCV进行颜色识别
- 2018的趋势与展望(下)——记罗振宇“时间的朋友2017”跨年演讲
- Python的RSA签名
- [渝粤教育] 重庆工商职业学院 生活中的大数据 参考 资料
- TIME_WAIT和CLOSE_WAIT区别
- 遥感影像条带噪声去除
- 低版本android无法连接iPhone手机个人热点问题
- 使用servlet获得客户端与服务器的信息
- Java设计模式【1】
- 人人都要懂的代码重构