what is nullish value?
所谓的 nullish value 空值就两个:null 和 undefined 。
when to use optional chaining?

当我们访问对象的属性时,但是这个对象可能会为null或者undefined,此时会报上面的错误,针对这种情况,我们通常需要做一些防御性的措施:
const isShowReviews = clazz && clazz.top_reviews && clazz.top_reviews.length > 0;
这种写法虽然能够保证页面不会报错,但是写法非常的麻烦,目前只有两层,如果访问对象的属性有很多层,且不是要写长长的一串。
可选链操作符 ?. 就是可以简化上面的写法:
const isShowReviews = clazz?.top_reviews?.length > 0;
可选链操作符 ?. 允许轻松访问嵌套对象的属性,而不必明确验证链中的每个引用是否有效,在引用为 nullish value 的情况下不会引起错误,而是返回 undefined。
Default with nullish coalescing operator
空值合并运算符 ?? 处理 undefined 或 null,并将它们置为特定值。
const undefinedValue = undefined;const nullValue = null;const value = 'Hello';undefinedValue ?? 'Nothing'; // => 'Nothing'nullValue ?? 'Nothing'; // => 'Nothing'value ?? 'Nothing'; // => 'Hello'
因为 可选链操作符?. 在发生短路时会返回 undefined,因此可以借助 空值合并运算符 ?? 为其默认值:
const starRating = teacher?.star_rating ?? 4;
polyfill
可选链操作符和空值合并运算符是比较新的语法,使用的时候一定要做polyfill,尤其在手机浏览器上,否则会报错导致页面空白。
// npmnpm install @babel/plugin-proposal-optional-chaining --save-devnpm install @babel/plugin-proposal-nullish-coalescing-operator --save-dev// babel.config.jsplugins: ["@babel/plugin-proposal-nullish-coalescing-operator","@babel/plugin-proposal-optional-chaining",],
注:vue template模板里面不能使用可选链操作符和空值合并运算符号,即使做了polyfill
参考文献
tc39/proposal-optional-chaining
可选链操作符- JavaScript | MDN
How to Use JavaScript Optional Chaining
