日韩成人免费在线_国产成人一二_精品国产免费人成电影在线观..._日本一区二区三区久久久久久久久不

當前位置:首頁 > 科技  > 軟件

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

來源: 責編: 時間:2024-05-07 09:15:09 163觀看
導讀Hello,大家好,我是 Sunday。今天是五一小長假的第三天,祝大家都可以五一玩的愉快 0.0昨天,幫一位同學看了一個 bug (因為該同學要五一后找工作,所以五一期間也不能停),代碼大概是這樣的:偽代碼然后得到了以下的錯誤:圖片有經驗

Hello,大家好,我是 Sunday。XvL28資訊網——每日最新資訊28at.com

今天是五一小長假的第三天,祝大家都可以五一玩的愉快 0.0XvL28資訊網——每日最新資訊28at.com

昨天,幫一位同學看了一個 bug (因為該同學要五一后找工作,所以五一期間也不能停),代碼大概是這樣的:XvL28資訊網——每日最新資訊28at.com

偽代碼偽代碼XvL28資訊網——每日最新資訊28at.com

然后得到了以下的錯誤:XvL28資訊網——每日最新資訊28at.com

圖片圖片XvL28資訊網——每日最新資訊28at.com

有經驗的同學都知道,這個錯誤是由于 user 中的 priv 是 undefined,所以從 priv 中獲取 idCard 的時候,拋出了 Cannot read properties of undefined (reading 'idCard') 的錯誤XvL28資訊網——每日最新資訊28at.com

而想要解決這個問題,其實非常簡單,只需要進行一個判空就可以,所以我幫他寫下了這樣的代碼:XvL28資訊網——每日最新資訊28at.com

圖片圖片XvL28資訊網——每日最新資訊28at.com

接下來該同學就問了我一個問題:“老師,這個 ? 是什么意思?為什么這樣就不報錯了?”XvL28資訊網——每日最新資訊28at.com

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

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

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

咱們以下面的這段代碼為例:XvL28資訊網——每日最新資訊28at.com

// mdn 示例:https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Operators/Optional_chainingconst adventurer = {  name: 'Alice',  cat: {    name: 'Dinah',  },};const dogName = adventurer.dog?.name; // 可以簡單理解為 adventurer.dog ? adventurer.dog.name : undefinedconsole.log(dogName); // undefined

使用場景: 當我們 不確定 一個對象是否存在時,調用對象屬性,可以使用該操作符XvL28資訊網——每日最新資訊28at.com

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

空值合并運算符(??)是一個邏輯運算符,當左側的操作數為 null 或者 undefined 時,返回其右側操作數,否則返回左側操作數。XvL28資訊網——每日最新資訊28at.com

以下面這段代碼為例:XvL28資訊網——每日最新資訊28at.com

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

有點類似與 ||(邏輯或),與邏輯或的區別在于 ?? 操作符對 0 和 '' 會判斷為真。XvL28資訊網——每日最新資訊28at.com

比如:XvL28資訊網——每日最新資訊28at.com

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

使用場景: 當需要把 0 或 '' 作為 真 時,使用 ?? ,否則使用 ||XvL28資訊網——每日最新資訊28at.com

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

邏輯空賦值運算符(x ??= y)僅在 x 是空值(null 或 undefined)時對其賦值。 以下面這段代碼為例:XvL28資訊網——每日最新資訊28at.com

// mdn 示例:https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Operators/Nullish_coalescing_assignmentconst a = { duration: 50 };a.duration ??= 10; // a.duration 存在,所以 不賦值console.log(a.duration); //  50 a.speed ??= 25; // a.speed 不存在,所以 賦值console.log(a.speed); // 25

這個在某些場景下非常有用,比如 為定時器賦值時:XvL28資訊網——每日最新資訊28at.com

let timer = nullfunction start () {  // if (!timer) {  //   timer = setInterval(() => { ... })  // }  timer ??= setInterval(() => { ... })}

使用場景: 當你需要通過 if 判斷某個變量不存在時,才需要為該變量賦值時使用XvL28資訊網——每日最新資訊28at.com

本文鏈接:http://www.www897cc.com/showinfo-26-87037-0.html每個開發者都必須要知道的,三個JS高效運算符:?. || ?? || ??=

聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。郵件:2376512515@qq.com

上一篇: 有人抵觸Ref?有人抵觸Reactive?

下一篇: Python 推導式在接口自動化里的運用

標簽:
  • 熱門焦點
Top 主站蜘蛛池模板: 广饶县| 罗平县| 阿克陶县| 洞头县| 浑源县| 翼城县| 泽库县| 桂林市| 乡宁县| 清水河县| 峨眉山市| 瑞昌市| 嘉祥县| 明星| 旬邑县| 泗水县| 鹤山市| 家居| 临泉县| 塘沽区| 靖宇县| 海兴县| 泰来县| 怀仁县| 陆河县| 天全县| 济源市| 舟曲县| 云龙县| 环江| 乡城县| 合肥市| 台州市| 齐齐哈尔市| 股票| 教育| 柳河县| 顺昌县| 鞍山市| 长春市| 绵阳市|