js 可選鏈操作符的使用
可選鏈操作符(?.)允許讀取位于鏈接對象鏈身處的屬性的值,而不必明確驗(yàn)證鏈中的每個引用是否有效。不同之處在于,在引用為空(null或者undefined)的情況下不會引起錯誤,該表達(dá)式短路返回值是undefined。與函數(shù)調(diào)用一起使用時,如果給定的函數(shù)不存在,則返回undefined。
當(dāng)嘗試訪問可能不存在的對象屬性時,可選鏈操作符將會使表達(dá)式根更短、更簡明。在探索一個對象的內(nèi)容時,如果不能確定哪些屬性必定存在,可選鏈操作符也是很有幫助的。
可選鏈操作符(?.)語法
obj?.propobj?.[expr]func?.(args)描述
通過連接的對象的引用或函數(shù)可能是 undefined 或 null 時,可選鏈操作符提供了一種方法來簡化被連接對象的值訪問。比如,思考一個存在嵌套結(jié)構(gòu)的對象 obj。不使用可選鏈的話,查找一個深度嵌套的子屬性時,需要驗(yàn)證之間的引用,例如:
let nestedProp = obj.first && obj.first.second
為了避免報錯,在訪問obj.first.second之前,要保證 obj.first 的值既不是 null,也不是 undefined。如果只是直接訪問 obj.first.second,而不對 obj.first 進(jìn)行校驗(yàn),則有可能拋出錯誤。有了可選鏈操作符(?.),在訪問 obj.first.second 之前,不再需要明確地校驗(yàn) obj.first 的狀態(tài),再并用短路計(jì)算獲取最終結(jié)果:
let nestedProp = obj.first?.second
通過使用 ?. 操作符取代 . 操作符,JavaScript 會在嘗試訪問 obj.first.second 之前,先隱式地檢查并確定 obj.first 既不是 null 也不是 undefined。如果obj.first 是 null 或者 undefined,表達(dá)式將會短路計(jì)算直接返回 undefined。
這等價于以下表達(dá)式,但實(shí)際上沒有創(chuàng)建臨時變量:
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使用
默認(rèn)情況下create-react-app,不允許修改babel配置,這里我們需要安裝兩個附加模塊以允許補(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來識別這種新語法。
yarn add babel-eslint --dev
添加.eslintrc文件
{ 'parser': 'babel-eslint', 'rules': { 'strict': 0 }}
在vscode中使用
vscode的js驗(yàn)證器目前并不能識別?.操作符,所以會有錯誤警告:
解決錯誤警告:
安裝vscode擴(kuò)展ESLint,在擴(kuò)展商店搜素并安裝ESLint。
修改vscode配置(.vscode/settings.json):
{ 'eslint.alwaysShowStatus': true, 'eslint.autoFixOnSave': true, 'javascript.validate.enable': false, // 主要是這個,關(guān)閉vscode的js驗(yàn)證器 '[javascript]': { 'editor.formatOnSave': false, }, '[javascriptreact]': { 'editor.formatOnSave': false, },}
來源: 可選鏈操作符
到此這篇關(guān)于js 可選鏈操作符的使用的文章就介紹到這了,更多相關(guān)js 可選鏈操作符內(nèi)容請搜索好吧啦網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持好吧啦網(wǎng)!
相關(guān)文章:
1. XML入門精解之結(jié)構(gòu)與語法2. SpringMVC+Jquery實(shí)現(xiàn)Ajax功能3. 匹配模式 - XSL教程 - 44. ASP.NET MVC使用異步Action的方法5. CSS Hack大全-教你如何區(qū)分出IE6-IE10、FireFox、Chrome、Opera6. JS中map和parseInt的用法詳解7. ASP中if語句、select 、while循環(huán)的使用方法8. XML入門的常見問題(一)9. 存儲于xml中需要的HTML轉(zhuǎn)義代碼10. 詳談ajax返回?cái)?shù)據(jù)成功 卻進(jìn)入error的方法
