MDN 上面的定义:
可选链操作符(
?.)允许读取位于连接对象链深处的属性的值,而不必明确验证链中的每个引用是否有效。?.操作符的功能类似于.链式操作符,不同之处在于,在引用为空(nullish ) (null或者undefined) 的情况下不会引起错误,该表达式短路返回值是undefined。与函数调用一起使用时,如果给定的函数不存在,则返回undefined
具体的用法:
const firstName = user.name && user.name.firstName
用可选链操作符可以写成
const firstName = user.name?.firstName
如果你想要 num 再 response 或者 response. 或者 response.data.num 不存在(值为 null 或者 undefined)时,num 保底值为 100,你可能会这样写
const num = response?.data?.num || 100
但是这会导致 response.data.num = 0 时,num = 100,而你实际上希望 num = 0。
于是你只好把代码写成这样
const num = response?.data?.n === undefined ? 100 : response?.data?.n
现在,你可以用另一个新语法——「双问号语法 Nullish Coalescing」——来简化代码:
const num = response?.data?.n ?? 100
这个 ?? 的意思是,如果 ?? 左边的值是 null 或者 undefined,那么就返回右边的值。