电脑知识|欧美黑人一区二区三区|软件|欧美黑人一级爽快片淫片高清|系统|欧美黑人狂野猛交老妇|数据库|服务器|编程开发|网络运营|知识问答|技术教程文章 - 好吧啦网

您的位置:首頁技術文章
文章詳情頁

js 可選鏈操作符的使用

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

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

當嘗試訪問可能不存在的對象屬性時,可選鏈操作符將會使表達式根更短、更簡明。在探索一個對象的內容時,如果不能確定哪些屬性必定存在,可選鏈操作符也是很有幫助的。

可選鏈操作符(?.)

語法

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

通過連接的對象的引用或函數可能是 undefined 或 null 時,可選鏈操作符提供了一種方法來簡化被連接對象的值訪問。比如,思考一個存在嵌套結構的對象 obj。不使用可選鏈的話,查找一個深度嵌套的子屬性時,需要驗證之間的引用,例如:

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

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

let nestedProp = obj.first?.second

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

這等價于以下表達式,但實際上沒有創建臨時變量:

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

我們可以通過babel編譯器來使用可以鏈操作符。

babel

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

添加.babelrc文件

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

在create-react-app使用

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

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來識別這種新語法。

yarn add babel-eslint --dev

添加.eslintrc文件

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

在vscode中使用

vscode的js驗證器目前并不能識別?.操作符,所以會有錯誤警告:

js 可選鏈操作符的使用

解決錯誤警告:

安裝vscode擴展ESLint,在擴展商店搜素并安裝ESLint。

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

{ 'eslint.alwaysShowStatus': true, 'eslint.autoFixOnSave': true, 'javascript.validate.enable': false, // 主要是這個,關閉vscode的js驗證器 '[javascript]': { 'editor.formatOnSave': false, }, '[javascriptreact]': { 'editor.formatOnSave': false, },}

來源: 可選鏈操作符

到此這篇關于js 可選鏈操作符的使用的文章就介紹到這了,更多相關js 可選鏈操作符內容請搜索好吧啦網以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持好吧啦網!

標簽: JavaScript
相關文章:
主站蜘蛛池模板: 旅游规划_旅游策划_乡村旅游规划_景区规划设计_旅游规划设计公司-北京绿道联合旅游规划设计有限公司 | 膏方加工_丸剂贴牌_膏滋代加工_湖北康瑞生物科技有限公司 | 河南15年专业网站建设制作设计,做网站就找郑州启凡网络公司 | CTP磁天平|小电容测量仪|阴阳极极化_双液系沸点测定仪|dsj电渗实验装置-南京桑力电子设备厂 | 大米加工设备|大米加工机械|碾米成套设备|大米加工成套设备-河南成立粮油机械有限公司 | 安平县鑫川金属丝网制品有限公司,防风抑尘网,单峰防风抑尘,不锈钢防风抑尘网,铝板防风抑尘网,镀铝锌防风抑尘网 | 广州企亚 - 数码直喷、白墨印花、源头厂家、透气无手感方案服务商! | 工业淬火油烟净化器,北京油烟净化器厂家,热处理油烟净化器-北京众鑫百科 | 厦门网站建设_厦门网站设计_小程序开发_网站制作公司【麦格科技】 | 刚性-柔性防水套管-橡胶伸缩接头-波纹管补偿器-启腾供水材料有限公司 | 蓝鹏测控平台 - 智慧车间系统 - 车间生产数据采集与分析系统 | 液压油缸-液压站生产厂家-洛阳泰诺液压科技有限公司 | 涂层测厚仪_光泽度仪_uv能量计_紫外辐照计_太阳膜测试仪_透光率仪-林上科技 | 钢绞线万能材料试验机-全自动恒应力两用机-混凝土恒应力压力试验机-北京科达京威科技发展有限公司 | MTK核心板|MTK开发板|MTK模块|4G核心板|4G模块|5G核心板|5G模块|安卓核心板|安卓模块|高通核心板-深圳市新移科技有限公司 | PCB设计,PCB抄板,电路板打样,PCBA加工-深圳市宏力捷电子有限公司 | 国际线缆连接网 - 连接器_线缆线束加工行业门户网站 | 包头市鑫枫装饰有限公司| 海日牌清洗剂-打造带电清洗剂、工业清洗剂等清洗剂国内一线品牌 海外整合营销-独立站营销-社交媒体运营_广州甲壳虫跨境网络服务 | 仿古瓦,仿古金属瓦,铝瓦,铜瓦,铝合金瓦-西安东申景观艺术工程有限公司 | 康明斯发电机,上柴柴油发电机,玉柴柴油发电机组_海南重康电力官网 | 细石混凝土泵_厂家_价格-烟台九达机械有限公司 | 免费B2B信息推广发布平台 - 推发网| 宁波普瑞思邻苯二甲酸盐检测仪,ROHS2.0检测设备,ROHS2.0测试仪厂家 | 选宝石船-陆地水上开采「精选」色选机械设备-青州冠诚重工机械有限公司 | 工业车间焊接-整体|集中除尘设备-激光|等离子切割机配套除尘-粉尘烟尘净化治理厂家-山东美蓝环保科技有限公司 | 大行程影像测量仪-探针型影像测量仪-增强型影像测量仪|首丰百科 大通天成企业资质代办_承装修试电力设施许可证_增值电信业务经营许可证_无人机运营合格证_广播电视节目制作许可证 | 四川实木门_成都实木门 - 蓬溪聚成门业有限公司 | 苹果售后维修点查询,苹果iPhone授权售后维修服务中心 – 修果网 拼装地板,悬浮地板厂家,悬浮式拼装运动地板-石家庄博超地板科技有限公司 | 吸音板,隔音板,吸音材料,吸音板价格,声学材料 - 佛山诺声吸音板厂家 | 北京亦庄厂房出租_经开区产业园招商信息平台 | 广西教师资格网-广西教师资格证考试网 | 大立教育官网-一级建造师培训-二级建造师培训-造价工程师-安全工程师-监理工程师考试培训 | PCB厂|线路板厂|深圳线路板厂|软硬结合板厂|电路板生产厂家|线路板|深圳电路板厂家|铝基板厂家|深联电路-专业生产PCB研发制造 | 华东师范大学在职研究生招生网_在职研究生招生联展网 | 猪I型/II型胶原-五克隆合剂-细胞冻存培养基-北京博蕾德科技发展有限公司 | 玻纤土工格栅_钢塑格栅_PP焊接_单双向塑料土工格栅_复合防裂布厂家_山东大庚工程材料科技有限公司 | 包装设计公司,产品包装设计|包装制作,包装盒定制厂家-汇包装【官方网站】 | TYPE-C厂家|TYPE-C接口|TYPE-C防水母座|TYPE-C贴片-深圳步步精 | 北京公寓出租网-北京酒店式公寓出租平台| 电动葫芦|防爆钢丝绳电动葫芦|手拉葫芦-保定大力起重葫芦有限公司 |