常见做法:通过||
运算符指定默认值。
const {string,data,getData} from props;
string=string||''
data=data||[]
getData=getData||new Function()
问题:但是这样的话,如果属性的值如果为空字符串或false
或0
,默认值也会生效
解决方法:使用判断运算符??。
它的行为类似||
,但是只有运算符左侧的值为null
或undefined
时,才会返回右侧的值。
const {string,data,getData} from props;
string=string ?? ''
data=data ?? []
getData=getData ?? new Function()
上面代码中,默认值只有在左侧属性值为null
或undefined
时,才会生效。
应用:??跟链判断运算符?.
配合使用,为null
或undefined
的值设置默认值。
const id = data?.id ?? '';
注意:
??
本质上是逻辑运算,它与其他两个逻辑运算符&&
和||
有一个优先级问题,它们之间的优先级到底孰高孰低。优先级的不同,往往会导致逻辑运算的结果不同。
现在的规则是,如果多个逻辑运算符一起使用,必须用括号表明优先级,否则会报错。
(aa && bb) ?? cc;
aa && (bb ?? cc);
简写方式:使用逻辑赋值运算符,将逻辑运算符与赋值运算符进行结合。
// 老的写法
string=string ?? ''
data=data ?? []
getData=getData ?? new Function()
// 新的写法
string ??= ''
data ??= []
getData??= new Function()