可选链运算符
可选链运算符帮助你编写表达式,遇到 null
或 undefined
就停止执行。
例如,如果你要检查用户不是 null
或 undefined
,可以像这样重构代码:
public static getName(user: IUser): string {
if(user?.firstName != null && user?.firstName != ""){
return user.firstName;
}
if(user?.lastName != null && user?.lastName != ""){
return user.lastName;
}
return user?.username || "";
}
有趣的是,您可以将其与数组和函数一起使用:
// Access first element of array if array is set
const element = array?.[0];
// Call function if set
myFunction.(args);
但在您的情况下,空位合并运算符更适合缩短代码。
空位合并运算符
空位合并运算符的作用类似于逻辑运算符||
,但只有在检查到的值等于null
或undefined
时才会返回默认值。它避免了使用||
时可能出现的错误,例如值等于0
或Nan
,因为||
仅检查nullish表达式。
这是您的代码的样子:
public static getName(user: IUser){
return user?.firstName ?? user?.lastName ?? user?.username ?? "";
}
以上两个运算符都用于更健壮的代码。
关于逻辑运算符 || 可能引发的错误
检查这个例子:你创建了一个应用程序,用户可以设置一个计时器。用户可以选择大于0
的时间,但如果没有,你会为他们设定一个默认时间。这是如何获取计时器的时间:
const time = userTime || defaultTime;
如果用户输入的数字严格大于0,则它将按预期工作,
time === userTime
。但是,如果他们输入
0
,逻辑运算符
||
将
0
识别为nullish表达式并回退到
defaultTime
。
为了避免这种情况,使用nullish coalescing运算符,只有在
userTime
等于
null
或
undefined
时才回退:
```JavaScript
time = userTime ?? defaultTime;
```
const time = userTime ?? defaultTime
以上代码将按预期运行。
IUser
是什么? - jcalz--strictNullChecks
而不必担心检查null
,因为null
和undefined
不在string
的域中。如果您期望值是类似于null
的,则接口定义应该说明(例如,将属性设置为可选?) - jcalz