ES6操作符使用總結

最近做新項目時候用到了ES6 添加的一些運算符,使用起來很方便,簡化了代碼,增強了代碼容錯性。使用感不錯,下面做了總結,本文也會持續維護。

1. !!props.useDefaultColor

這個技巧的作用是將任何 JavaScript 值轉換為相應的布爾值。當原始值為假值(例如 false、null、undefined、空字符串 ‘’、數字 0、NaN)時,結果為 false;當原始值為真值時,結果為 true。

2. 可選鏈運算符 ?.

  • 可選鏈運算符(?.)允許讀取位于連接對象鏈深處的屬性的值,而不必明確驗證鏈中的每個引用是否有效。
  • ?. 運算符的功能類似于 . 鏈式運算符,不同之處在于,在左側的對象為空 (null 或者 undefined) 的情況下不會引起錯誤,返回 undefined
  • 可選鏈可以幫助我們減少判斷有效值的代碼,特別是深層嵌套對象下訪問某個屬性,如果屬性不存在,不會引起錯誤。
  • 另外,可以在使用可選鏈時設置一個默認值,和下面的Null 判斷運算符 ?? 搭配使用:
let useInfo = {name: "鐵錘妹妹",details: { age: 18 }
}
let add = useInfo ?.city ?? '默認值'; // 同等于使用 useInfo ?.city || '默認值'
console.log(add) // '默認值'
  • 鏈判斷運算符?. 有三種寫法

1)obj?.prop // 對象屬性是否存在
2)obj?.[expr] // 同上
3)func?.(...args) // 函數或對象方法是否存在

使用案例:

const firstName = message?.body?.user?.firstName || 'default';

3. Null 判斷運算符 ??

context.$attrs.renderValue ?? '-'
  • 上面代碼中,默認值只有在左側屬性值為nullundefined時,才會生效。
  • 可以簡化代碼并提高可讀性,特別是在需要提供默認值的情況下。
  • 上面案例表示如果 context.$attrs.renderValue 不為 null 或 undefined,則返回 context.$attrs.renderValue 的值;否則,返回 '-'。這個表達式的作用是提供一個默認值,以防止 context.$attrs.renderValue 為 null 或 undefined 時引發錯誤或產生意外結果。
  • 這個運算符的一個目的,就是跟鏈判斷運算符?.配合使用,為nullundefined的值設置默認值。
const animationDuration = response.settings?.animationDuration ?? 300;
  • 上面代碼中,如果response.settingsnullundefined,或者response.settings.animationDurationnullundefined,就會返回默認值300。也就是說,這一行代碼包括了兩級屬性的判斷。
  • ??本質上是邏輯運算,它與其他兩個邏輯運算符 && 和 || 有一個優先級問題,如果多個邏輯運算符一起使用,必須用括號表明優先級,否則會報錯。
lhs && middle ?? rhs  // 報錯(lhs && middle) ?? rhs;
lhs && (middle ?? rhs);

使用案例

// 通過計算屬性將addReferFee,baseReferFee 值為null或undefined時,默認返回0,然后將兩個值進行相加
const totalAmount = computed(()=>{const addReferFee = state.baseInfo?.addReferFee ?? 0const baseReferFee = state.baseInfo?.baseReferFee ?? 0return calulateAdd(addReferFee, baseReferFee )
})
function calulateAdd(num1:Decimal.Value, num2:Decimal.Value){return Decimal.add(num1,num2).toNumber()
}

4. ! 是 非空斷言操作符

 item!.roleUid === row!.roleUId
  • item!.roleUid:表示從 item 對象中獲取 roleUid 屬性的值。! 是 TypeScript 中的非空斷言操作符,它告訴 TypeScript 編譯器,item 對象一定不是 null 或 undefined,可以安全地訪問其屬性。
  • row!.roleUId:類似地,表示從 row 對象中獲取 roleUId 屬性的值,同樣使用了非空斷言操作符。
  • 注意,非空斷言操作符 ! 的使用要小心,它會告訴 TypeScript 編譯器“我很確定這個值不會是 nullundefined”,因此如果實際上出現了 null 或 undefined 的情況,會導致運行時錯誤。因此,在使用非空斷言操作符時,需要確保對象確實不會為 nullundefined

更詳細的請閱讀:ES6官方文檔 - 運算符的擴展

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/44864.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/44864.shtml
英文地址,請注明出處:http://en.pswp.cn/web/44864.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

管理Linux本地用戶和組

什么是用戶 用戶賬戶在可以運行命令的不同人員和程序之間提供安全界限。 在Linux系統中,系統通過分配唯一的標識號(用戶ID或UID)來區分不同的用戶帳戶。 在Linux系統中,用戶帳戶有以下三種主要類型: 超級用戶 負責…

分布式一致性算法:Raft學習

分布式一致性算法:Raft學習 1 什么是分布式系統? 分布式系統是由一組通過網絡進行通信、為了完成共同的任務而協調工作的計算機節點組成的系統。這些節點可能位于不同的物理位置,但它們協同工作以提供一個統一的計算平臺或服務。分布式系統…

對于復雜的數學模型,怎樣利用 MATLAB 的優化工具箱進行準確的參數估計和模型擬合?

要利用MATLAB的優化工具箱進行準確的參數估計和模型擬合,可以按照以下步驟進行: 定義模型:根據問題的需求和數學模型的形式,定義好模型的數學表達式。 收集數據:收集實際觀測數據,這些數據將用于擬合模型和…

Ubuntu linux安裝新版本go

加速網站:GOPROXY.IO - A Global Proxy for Go Modules 下載地址:All releases - The Go Programming Language Ubuntu jammy版本里面自帶的go版本較低,build ollama的時候報錯,于是升級go 升級操作 從上面下載地址找到自己需…

25秋招面試算法題 (Go版本)

文章目錄 科大訊飛 0713找01不能出現太多 科大訊飛 0713 找01 牛牛擁有一個長度為 n 的01 串,現在他想知道,對于每個字符,在它前面的最近的不同字符的下標是多少? 輸入描述 本題為多組測試數據,第一行輸入一個正整…

代碼隨想錄第五十五天打卡

42. 接雨水 接雨水這道題目是 面試中特別高頻的一道題,也是單調棧 應用的題目,大家好好做做。 建議是掌握 雙指針 和單調棧,因為在面試中 寫出單調棧可能 有點難度,但雙指針思路更直接一些。 在時間緊張的情況有,能寫出…

Unity中一鍵生成具有身體感知的虛擬人物動作

在虛擬現實(VR)和增強現實(AR)的浪潮中,如何讓虛擬人物的動作更加自然、真實,已經成為一個重要課題。AI4Animation項目,一個由 Sebastian Starke 主導的開源框架,為Unity開發者提供了強大的工具集,以實現這一目標。本文…

OrangePi AIpro在安防領域的深思和實戰(曠視科技CNN模型ShuffleNetV1開發案例測試)

一、前言 公司最近有個項目是安防領域的,主要用在邊緣結點,雖然已做成形,但是還是存在一些缺陷,例如:算力問題,開發板的成熟問題,已經各種技術的解決方案落地問題。目前我們集成了很多功能&…

Facebook 開源計算機視覺 (CV) 和 增強現實 (AR) 框架 Ocean

Ocean 是一個獨立于平臺的框架,支持所有主要操作系統,包括 iOS、Android、Quest、macOS、Windows 和 Linux。它旨在徹底改變計算機視覺和混合現實應用程序的開發。 Ocean 主要使用 C 編寫,包括計算機視覺、幾何、媒體處理、網絡和渲染&#x…

python中的pickle模塊和json模塊

目錄 pickle: Python 中的pickle 是一個內置模塊,用于序列化和反序列化 Python 對象結構。序列化是將對象轉換成字節流的過程,這樣對象就可以被存儲到文件中或者通過網絡傳輸。反序列化則是將這些字節流重新轉換成原始對象的過程。 json: json模塊是 …

實現多層感知機

目錄 多層感知機: 介紹: 代碼實現: 運行結果: 問題答疑: 線性變換與非線性變換 參數含義 為什么清除梯度? 反向傳播的作用 為什么更新權重? 多層感知機: 介紹:…

taocms 3.0.1 本地文件泄露漏洞(CVE-2021-44983)

前言 CVE-2021-44983 是一個影響 taoCMS 3.0.1 的遠程代碼執行(RCE)漏洞。該漏洞允許攻擊者通過上傳惡意文件并在服務器上執行任意代碼來利用這一安全缺陷。 漏洞描述 taoCMS 是一個內容管理系統(CMS),用于創建和管…

持續集成的自動化之旅:Gradle在CI中的配置秘籍

持續集成的自動化之旅:Gradle在CI中的配置秘籍 引言 持續集成(Continuous Integration, CI)是現代軟件開發中的一項基礎實踐,它通過自動化的構建和測試流程來提高軟件質量和開發效率。Gradle作為一個靈活的構建工具,…

【眼疾病識別】圖像識別+深度學習技術+人工智能+卷積神經網絡算法+計算機課設+Python+TensorFlow

一、項目介紹 眼疾識別系統,使用Python作為主要編程語言進行開發,基于深度學習等技術使用TensorFlow搭建ResNet50卷積神經網絡算法,通過對眼疾圖片4種數據集進行訓練(‘白內障’, ‘糖尿病性視網膜病變’, ‘青光眼’, ‘正常’&…

jenkins系列-05-jenkins構建golang程序

下載go1.20.2.linux-arm64.tar.gz 并存放到jenkins home目錄: 寫一個golang demo程序:靜態文件服務器:https://gitee.com/jelex/jenkins_golang package mainimport ("encoding/base64""flag""fmt""lo…

window下安裝go環境

一、go官網下載安裝包 官網地址如下:https://golang.google.cn/dl/ 選擇對應系統的安裝包,這里是window系統,可以選擇zip包,下載完解壓就可以使用 二、配置環境變量 這里的截圖配置以win11為例 我的文件解壓目錄是 D:\Software…

力扣32.最長有效括號

力扣32.最長有效括號 class Solution {public:int longestValidParentheses(string s) {int n s.size();int res0;int start -1;vector<int> st;for(int i0;i<n;i){if(s[i] ()st.push_back(i);else{//前面沒有( , (開啟下一段)下一段的開始更新為當前下標if(st.emp…

機器學習和人工智能在農業的應用——案例分析

作者主頁: 知孤云出岫 目錄 引言機器學習和人工智能在農業的應用1. 精準農業作物健康監測土壤分析 2. 作物產量預測3. 農業機器人自動化播種和收割智能灌溉 4. 農業市場分析價格預測需求預測 機器學習和人工智能帶來的變革1. 提高生產效率2. 降低生產成本3. 提升作物產量和質量…

Elsaticsearch java基本操作

索引 基本操作 package com.orchids.elasticsearch.web.controller;import cn.hutool.core.collection.CollUtil; import cn.hutool.json.JSONUtil; import com.orchids.elasticsearch.web.po.User; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOpe…

探索JT808協議在車輛遠程視頻監控系統中的應用

一、部標JT808協議概述 隨著物聯網技術的迅猛發展&#xff0c;智能交通系統&#xff08;ITS&#xff09;已成為現代交通領域的重要組成部分。其中&#xff0c;車輛遠程監控與管理技術作為ITS的核心技術之一&#xff0c;對于提升交通管理效率、保障道路安全具有重要意義。 JT8…