1、什么是双问号
双问号是ES2020 的一个新特性,它的作用是,当一个表达式为 null 或 undefined 的时候为变量设置一个默认值。
ECMAScript® 2020 Language Specification
mdn 介绍:Nullish coalescing operator (??) - JavaScript | MDN
2、他和双 || (logical or operator)的区别
我的理解是,双问号是双或的子集。
双或是当左侧表达式为 false 的时候,设置右侧默认值。
强转之后为false的包括:null、undefinded、NAN、’‘、0
但是双问号,就仅仅是 过滤 null 和undefined。
3、应用
根据它的区别就可知,但我们需要过滤掉 0 和空字符串时,可以采用 逻辑或 || ,
当仅仅需要过滤 空值的时候,就 采用 ??
举个例子:
给数组对象排序,结构如下:
export interface GroupData {
/** 分组名称 */
name: string
data?: ItemData[]
order?: number
}
因为排序 order 是可选项,如果不用 双问号,
则代码为:
data.sort((a,b)=>(a.order ==='undefined' ? 999 : a.order)-(b.order ==='undefined' ? 999 : b.order))
如果使用可选项:
data.sort((a,b)=>(a.order ?? 999)-(b.order ?? 999))
是不是显得代码简单清晰多了。