链判断运算符
在编程中,为了规避undefined报错,经常会使用短路运算符,例如:
const firstName =
(message &&
message.body &&
message.body.user &&
message.body.user.firstName) ||
'default';
这种写法太过于复杂,所以ES2020引入了“链判断运算符” ---?.,来简化上面的写法:
const firstName = message?.body?.user?.firstName || 'default';
链判断运算符会在链式调用的时候进行判断,判断左侧的对象是否为null或者undefined,如果是,就不会往下运算,直接返回undefined即可。
null判断运算符
在之前,当我们判断某个值为null或者undefined的时候,会使用||运算符来给一个默认值:
const headerText = response.settings.headerText || 'Hello, world!';
其实这种写法是有错误的。我们的目的是,当属性值为null或者undefined的时候,默认值生效,但是上面的写法中,如果属性的值为空字符串、false或者0,默认值也会生效。
为了避免这种情况,ES2020引入了Null判断运算符---??。它类似||,但是只有左侧的值为null或者undefined的时候,才会返回右侧的值。
const animationDuration = response.settings?.animationDuration ?? 300;