最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

js 可選鏈操作符的使用

 更新時(shí)間:2021年06月01日 15:02:59   作者:FruitBro  
可選鏈操作符(?.)允許讀取位于鏈接對(duì)象鏈身處的屬性的值,本文就詳細(xì)的介紹一下,感興趣的小伙伴們可以參考一下

前言

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

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

可選鏈操作符(?.)

語法

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

描述

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

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

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

let nestedProp = obj.first?.second

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

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

let temp = obj.first
let 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配置,這里我們需要安裝兩個(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來識(shí)別這種新語法。

yarn add babel-eslint --dev

添加.eslintrc文件

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

在vscode中使用

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


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

 來源: 可選鏈操作符

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

相關(guān)文章

  • JS實(shí)現(xiàn)快速的導(dǎo)航下拉菜單動(dòng)畫效果附源碼下載

    JS實(shí)現(xiàn)快速的導(dǎo)航下拉菜單動(dòng)畫效果附源碼下載

    本文給大家分享一個(gè)帶有變形動(dòng)畫特效的下拉導(dǎo)航菜單特效,該導(dǎo)航菜單在菜單項(xiàng)之間切換時(shí),下拉菜單會(huì)快速的根據(jù)菜單內(nèi)容的大小來動(dòng)態(tài)變形,顯示合適的下拉菜單大小,效果非常棒。對(duì)導(dǎo)航下拉菜單代碼感興趣的朋友可以參考下本文
    2016-11-11
  • js實(shí)現(xiàn)hashtable的賦值、取值、遍歷操作實(shí)例詳解

    js實(shí)現(xiàn)hashtable的賦值、取值、遍歷操作實(shí)例詳解

    這篇文章主要介紹了js實(shí)現(xiàn)hashtable的賦值、取值、遍歷操作,結(jié)合實(shí)例形式分析了哈希表的原理、哈希鍵值對(duì)操作相關(guān)技巧,需要的朋友可以參考下
    2016-12-12
  • 分享js粘帖屏幕截圖到web頁面插件screenshot-paste

    分享js粘帖屏幕截圖到web頁面插件screenshot-paste

    這篇文章主要為大家分享了js粘帖屏幕截圖到web頁面插件screenshot-paste的相關(guān)資料,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2016-03-03
  • 微信小程序?qū)崿F(xiàn)批量倒計(jì)時(shí)功能

    微信小程序?qū)崿F(xiàn)批量倒計(jì)時(shí)功能

    這篇文章主要為大家詳細(xì)介紹了微信小程序?qū)崿F(xiàn)批量倒計(jì)時(shí)功能,適用于商品列表倒計(jì)時(shí),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-06-06
  • js left,right,mid函數(shù)

    js left,right,mid函數(shù)

    在JAVASCRIPT中LEFT,RIGHT,MID函數(shù)的等價(jià)函數(shù),非常適合經(jīng)常用寫asp的朋友
    2008-06-06
  • 詳解JS中???和?.?和||的區(qū)別

    詳解JS中???和?.?和||的區(qū)別

    這篇文章主要介紹了詳解JS中???和?.?和||的區(qū)別,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-06-06
  • 使用js解決由border屬性引起的div寬度問題

    使用js解決由border屬性引起的div寬度問題

    由于border屬性引起的div寬度問題,確實(shí)很讓人頭疼,在本文將為大家介紹下使用JS是如何解決的,感興趣的朋友不要錯(cuò)過
    2013-11-11
  • 一起來了解一下JavaScript的預(yù)編譯(小結(jié))

    一起來了解一下JavaScript的預(yù)編譯(小結(jié))

    這篇文章主要介紹了一起來了解一下JavaScript的預(yù)編譯(小結(jié)),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-03-03
  • 詳解ES6中的代理模式——Proxy

    詳解ES6中的代理模式——Proxy

    這篇文章主要介紹了詳解ES6中的代理模式——Proxy,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2018-01-01
  • js添加綁定事件的方法

    js添加綁定事件的方法

    這篇文章主要為大家詳細(xì)介紹了js添加事件的通用方法,還為大家介紹了js綁定事件的常用方式,感興趣的小伙伴們可以參考一下
    2016-05-05

最新評(píng)論

临邑县| 大荔县| 资阳市| 怀宁县| 湖口县| 都江堰市| 富平县| 镇宁| 泰宁县| 安远县| 塔城市| 都兰县| 延庆县| 甘谷县| 浦江县| 凤山市| 依兰县| 汽车| 丰都县| 麻江县| 泽州县| 满城县| 聊城市| 洛阳市| 罗田县| 都安| 岳普湖县| 榆树市| 丹阳市| 洛南县| 扶绥县| 皮山县| 精河县| 信丰县| 房产| 曲阳县| 牡丹江市| 弥渡县| 华宁县| 嘉鱼县| 铜山县|