點燈坊

失くすものさえない今が強くなるチャンスよ

使用 Babel 支援 Nullish Coalescing Operator

Sam Xiao's Avatar 2019-12-05

若要為 nullundefined 提供預設值,由於 nullundefined 也是 Falsy Value,過去會使用 || ,但 Empty String 與 0 亦為 Falsy Value,因此可能會造成意想不到 Bug,且語意也不夠精確,?? 提供了更精確的解決方案。

Version

macOS Catalina 10.15.1
WebStorm 2019.3
Node 13.2.0
Babel 7.6.4
ECMAScript 2020

Plugin Installation

$ yarn add @babel/core @babel/cli @babel/preset-env @babel/node --dev

安裝 Babel 所需 package。

$ yarn add @babel/plugin-proposal-nullish-coalescing-operator --dev

安裝 @babel/plugin-proposal-nullish-coalescing-operator,由於是 Babel 使用,安裝成 devDependencies 即可。

nullish000

package.json

nullish001

Babel Configuration

.babelrc

{
  "plugins": [
    "@babel/plugin-proposal-nullish-coalescing-operator"
  ]
}

在 project 根目錄新增 .babelrc 設定 plugin。

nullish002

Nullish Coalescing Operator

let foo = null ?? 'default string'
console.log(foo)

let baz = 0 ?? 42
console.log(baz)

?? 左側為 nullundefined,將回傳 ?? 右側值。

?? 左側為 empty string 或 0,將回傳 ?? 左側值,因此與 || 明顯不同。

nullish003

Conclusion

  • ?? 目前為 ECMAScript 2020 標準,可先透過 Babel 輔助率先使用

Sample Code

完整範例可在我的 GitHub 上找到

Reference

Babel, @babel/plugin-proposal-nullish-coalescing-operator
MDN, Nullish coalescing operator