久久r热视频,国产午夜精品一区二区三区视频,亚洲精品自拍偷拍,欧美日韩精品二区

您的位置:首頁(yè)技術(shù)文章
文章詳情頁(yè)

js 可選鏈操作符的使用

瀏覽:123日期:2024-03-23 17:48:58
前言

可選鏈操作符(?.)允許讀取位于鏈接對(duì)象鏈身處的屬性的值,而不必明確驗(yàn)證鏈中的每個(gè)引用是否有效。不同之處在于,在引用為空(null或者undefined)的情況下不會(huì)引起錯(cuò)誤,該表達(dá)式短路返回值是undefined。與函數(shù)調(diào)用一起使用時(shí),如果給定的函數(shù)不存在,則返回undefined。

當(dāng)嘗試訪問(wèn)可能不存在的對(duì)象屬性時(shí),可選鏈操作符將會(huì)使表達(dá)式根更短、更簡(jiǎn)明。在探索一個(gè)對(duì)象的內(nèi)容時(shí),如果不能確定哪些屬性必定存在,可選鏈操作符也是很有幫助的。

可選鏈操作符(?.)

語(yǔ)法

obj?.propobj?.[expr]func?.(args)描述

通過(guò)連接的對(duì)象的引用或函數(shù)可能是 undefined 或 null 時(shí),可選鏈操作符提供了一種方法來(lái)簡(jiǎn)化被連接對(duì)象的值訪問(wèn)。比如,思考一個(gè)存在嵌套結(jié)構(gòu)的對(duì)象 obj。不使用可選鏈的話,查找一個(gè)深度嵌套的子屬性時(shí),需要驗(yàn)證之間的引用,例如:

let nestedProp = obj.first && obj.first.second

為了避免報(bào)錯(cuò),在訪問(wèn)obj.first.second之前,要保證 obj.first 的值既不是 null,也不是 undefined。如果只是直接訪問(wèn) obj.first.second,而不對(duì) obj.first 進(jìn)行校驗(yàn),則有可能拋出錯(cuò)誤。有了可選鏈操作符(?.),在訪問(wèn) obj.first.second 之前,不再需要明確地校驗(yàn) obj.first 的狀態(tài),再并用短路計(jì)算獲取最終結(jié)果:

let nestedProp = obj.first?.second

通過(guò)使用 ?. 操作符取代 . 操作符,JavaScript 會(huì)在嘗試訪問(wèn) obj.first.second 之前,先隱式地檢查并確定 obj.first 既不是 null 也不是 undefined。如果obj.first 是 null 或者 undefined,表達(dá)式將會(huì)短路計(jì)算直接返回 undefined。

這等價(jià)于以下表達(dá)式,但實(shí)際上沒(méi)有創(chuàng)建臨時(shí)變量:

let temp = obj.firstlet nestedProp = ((temp === null || temp === undefined) ? undefined : temp.second) 使用

我們可以通過(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ò)誤警告:

js 可選鏈操作符的使用

解決錯(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, },}

來(lái)源: 可選鏈操作符

到此這篇關(guān)于js 可選鏈操作符的使用的文章就介紹到這了,更多相關(guān)js 可選鏈操作符內(nèi)容請(qǐng)搜索好吧啦網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持好吧啦網(wǎng)!

標(biāo)簽: JavaScript
相關(guān)文章:
主站蜘蛛池模板: 鄢陵县| 藁城市| 莱阳市| 通海县| 九龙县| 霍山县| 芷江| 普陀区| 乳山市| 彰化市| 张掖市| 萨嘎县| 睢宁县| 巴青县| 宁远县| 安塞县| 永春县| 抚顺县| 鄄城县| 呼图壁县| 马山县| 楚雄市| 和平区| 闻喜县| 定南县| 宁晋县| 莲花县| 上高县| 新乡市| 禹州市| 贵港市| 新郑市| 龙口市| 敖汉旗| 左权县| 黎平县| 始兴县| 无棣县| 漾濞| 定日县| 公主岭市|