成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

每個開發者都必須要知道的,三個JS高效運算符:?. || ?? || ??=

開發 前端
可選鏈運算符(?.)允許讀取位于連接對象鏈深處的屬性的值,而不必明確驗證鏈中的每個引用是否有效(是否為 undefined || null)。這也是為什么在上述的描述中,添加了 ?. 之后就不會報錯的原因。

Hello,大家好,我是 Sunday。

今天是五一小長假的第三天,祝大家都可以五一玩的愉快 0.0

昨天,幫一位同學看了一個 bug (因為該同學要五一后找工作,所以五一期間也不能停),代碼大概是這樣的:

偽代碼偽代碼

然后得到了以下的錯誤:

圖片圖片

有經驗的同學都知道,這個錯誤是由于 user 中的 priv 是 undefined,所以從 priv 中獲取 idCard 的時候,拋出了 Cannot read properties of undefined (reading 'idCard') 的錯誤

而想要解決這個問題,其實非常簡單,只需要進行一個判空就可以,所以我幫他寫下了這樣的代碼:

圖片圖片

接下來該同學就問了我一個問題:“老師,這個 ? 是什么意思?為什么這樣就不報錯了?”

這應該不是一個個例,我印象中有很多同學問到過這個問題,所以咱們今天就一口氣把 3 個常見的提效操作符(?.、??、??=),分享給大家,幫大家大幅提升開發效率

01:可選鏈操作符 (?.)

可選鏈運算符(?.)允許讀取位于連接對象鏈深處的屬性的值,而不必明確驗證鏈中的每個引用是否有效(是否為 undefined || null)。這也是為什么在上述的描述中,添加了 ?. 之后就不會報錯的原因

咱們以下面的這段代碼為例:

// mdn 示例:https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Operators/Optional_chaining
const adventurer = {
  name: 'Alice',
  cat: {
    name: 'Dinah',
  },
};

const dogName = adventurer.dog?.name; // 可以簡單理解為 adventurer.dog ? adventurer.dog.name : undefined
console.log(dogName); // undefined

使用場景: 當我們 不確定 一個對象是否存在時,調用對象屬性,可以使用該操作符

02:空值合并操作符(??)

空值合并運算符(??)是一個邏輯運算符,當左側的操作數為 null 或者 undefined 時,返回其右側操作數,否則返回左側操作數。

以下面這段代碼為例:

// mdn 示例:https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Operators/Nullish_coalescing
const foo = null ?? 'default string';
console.log(foo); // "default string"

有點類似與 ||(邏輯或),與邏輯或的區別在于 ?? 操作符對 0 和 '' 會判斷為真。

比如:

const baz = 0 ?? 42;
console.log(baz); // 0。因為 0 在 ?? 中被判斷為 真
----
const baz = 0 || 42;
console.log(baz); // 42。因為 0 在 || 中被判斷為 假

使用場景: 當需要把 0 或 '' 作為 真 時,使用 ?? ,否則使用 ||

03:邏輯空賦值(??=)

邏輯空賦值運算符(x ??= y)僅在 x 是空值(null 或 undefined)時對其賦值。 以下面這段代碼為例:

// mdn 示例:https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Operators/Nullish_coalescing_assignment

const a = { duration: 50 };

a.duration ??= 10; // a.duration 存在,所以 不賦值
console.log(a.duration); //  50 

a.speed ??= 25; // a.speed 不存在,所以 賦值
console.log(a.speed); // 25

這個在某些場景下非常有用,比如 為定時器賦值時:

let timer = null

function start () {
  // if (!timer) {
  //   timer = setInterval(() => { ... })
  // }

  timer ??= setInterval(() => { ... })
}

使用場景: 當你需要通過 if 判斷某個變量不存在時,才需要為該變量賦值時使用

責任編輯:武曉燕 來源: 程序員Sunday
相關推薦

2024-12-13 12:53:05

JS高效運算符對象

2013-04-02 09:23:37

2025-01-03 11:54:05

2013-07-18 09:42:23

2023-03-07 17:56:09

Docker容器開源

2014-09-29 10:08:34

2012-04-09 13:16:20

DIVCSS

2019-08-06 14:54:22

Hadoop數據集海量數據

2024-09-27 17:04:09

2019-02-18 13:36:03

Redis數據庫面試

2018-11-28 10:00:42

React組件前端

2021-11-01 09:51:41

IT領導者CIO首席信息管理

2015-11-09 10:50:42

2013-06-28 14:19:20

2024-04-09 16:24:18

Promise開發

2011-07-13 11:03:17

ASP

2023-06-05 16:50:06

開發TypeScriptJavaScript

2016-02-22 15:09:19

Android項目管理技巧

2025-02-25 08:30:00

前端開發VSCode

2023-06-27 07:55:03

前端開發工具
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 99久久精品视频免费 | 91欧美 | 亚洲精品久久久久久久久久久 | 亚洲夜射| 欧美最猛黑人xxxⅹ 粉嫩一区二区三区四区公司1 | 精品一区二区三 | 久久久www成人免费无遮挡大片 | 亚洲国产欧美一区二区三区久久 | 欧美在线观看一区二区 | 9999国产精品欧美久久久久久 | 欧美三级成人理伦 | xxxxxx国产| 国产伦精品一区二区三毛 | 91欧美激情一区二区三区成人 | 国产高清精品在线 | 91精品国产一区二区三区 | 久久精品com| 日韩午夜精品 | 欧美二区在线 | 国产精品视屏 | 欧美性影院 | 日日操操| www久久av | 视频一区二区在线观看 | 九一视频在线播放 | 97人人干| 国产高清一区二区三区 | 精品九九 | 久久手机在线视频 | 免费在线观看av | 欧美又大粗又爽又黄大片视频 | 91麻豆精品国产91久久久更新资源速度超快 | 美女一区 | 欧美日韩国产一区二区三区 | 天天操夜夜爽 | 天天综合国产 | 综合网中文字幕 | 日韩靠逼| 91一区二区 | 精品一区二区av | 欧美片网站免费 |