js 可選鏈操作符(javascript-optional-chaining)使用

可選鏈操作符是一個(gè)新的js api,它允許讀取一個(gè)被連接對(duì)象的深層次的屬性的值而無(wú)需明確校驗(yàn)鏈條上每一個(gè)引用的有效性。目前處于Stage 3提案階段,暫時(shí)不可以直接使用,可以通過(guò)babel編譯器使用。

可選鏈操作符(?.)

語(yǔ)法

obj?.prop
obj?.[expr]
func?.(args)

使用介紹

比如,我們有一個(gè)對(duì)象obj,現(xiàn)在要訪問(wèn)它的深層屬性baz。

const obj = {
  foo: {
    bar: {
      baz: 42,
      fun: ()=>{}
    },
  },
};

// 不使用?.
let baz = obj && obj.foo && obj.foo.bar && obj.foo.bar.baz;

// 使用?.
let baz = obj?.foo?.bar?.baz; // 結(jié)果:42

函數(shù)調(diào)用和表達(dá)式

// 函數(shù)調(diào)用
obj.fn?.()
// 表達(dá)式
obj?.['prop' + 'Name]

使用

我們可以通過(guò)babel編譯器來(lái)使用可以鏈操作符。

babel

yarn add @babel/plugin-proposal-optional-chaining --dev

添加.babelrc文件

{
  "plugins": ["@babel/plugin-proposal-optional-chaining"]
}

在create-react-app使用

默認(rèn)情況下create-react-app,不允許修改babel配置,這里我們需要安裝兩個(gè)附加模塊以允許補(bǔ)充默認(rèn)配置。

yarn add customize-cra react-app-rewired --dev

添加config-overrides.js文件

const { useBabelRc, override } = require('customize-cra');
module.exports = override(useBabelRc());

修改package.json

"scripts": {
  "start": "react-app-rewired start",
  "build": "react-app-rewired build",
  "test": "react-app-rewired test --env=jsdom"
}

eslint

安裝babel編譯器后,就可以使用?.操作符了。但是如果你使用eslint的話,你就需要安裝babel-eslint來(lái)識(shí)別這種新語(yǔ)法。

yarn add babel-eslint --dev

添加.eslintrc文件

{
  "parser": "babel-eslint",
  "rules": {
    "strict": 0
  }
}

在vscode中使用

vscode的js驗(yàn)證器目前并不能識(shí)別?.操作符,所以會(huì)有錯(cuò)誤警告:

QQ截圖20191122173835.png

解決錯(cuò)誤警告:

安裝vscode擴(kuò)展ESLint,在擴(kuò)展商店搜素并安裝ESLint。

修改vscode配置(.vscode/settings.json):

{
  "eslint.alwaysShowStatus": true,
  "eslint.autoFixOnSave": true,
  "javascript.validate.enable": false, // 主要是這個(gè),關(guān)閉vscode的js驗(yàn)證器
  "[javascript]": {
    "editor.formatOnSave": false,
  },
  "[javascriptreact]": {
  "editor.formatOnSave": false,
  },
}

最后

愉快的使用?.操作符。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容