js中“??“和“?.“用法小結(jié)
js中“??“和“?.“怎么用
??:空值合并操作符
邏輯操作符,左側(cè)為null和undefined時,才返回右側(cè)的數(shù)
const sum = null ?? 12 console.log(sum); //輸出12
const sum1 = 12 ?? 23 console.log(sum1); //輸出12
const sum2 = undefined ?? 12 console.log(sum2); //輸出12
?. :可選鏈操作符
可以讀取位于連接對象鏈深處屬性的值,不必明確驗證鏈中的每個引用是否有效
功能類似于“.” 鏈?zhǔn)讲僮鞣?,不同之處在于?strong>在引用為空null 或者 undefined 的情況下不會引起錯誤,該表達(dá)式短路返回值是 undefined
與函數(shù)調(diào)用一起使用時,如果給定的函數(shù)不存在,則返回 undefined。
const fa = { name: 'lming', son: { name: 'lqq' } }; const duc = fa.duc?.name; console.log(duc); //輸出undefined
使用:
1.獲取一個對象更深層次的屬性,即obj中的first屬性下的second屬性。
為了避免報錯, 獲取之前要判斷first屬性是否為null或者undefined,在獲取second屬性
使用“與”運(yùn)算符
let num = obj.first && obj.first.second;
使用?.可選鏈操作符
let num = obj.first?.second;
可選鏈與函數(shù)調(diào)用
調(diào)用一個可能不存在的方法時,如果被調(diào)用的方法不存在,使用可選鏈可以使表達(dá)式自動返回undefined而不是拋出一個異常
let result = someInterface.customMethod?.();
注:如果存在一個屬性名且不是函數(shù), 使用 ?. 仍然會產(chǎn)生一個 TypeError 異常 (x.y is not a function).
使用空值合并操作符
let customer = { name: "Carl", details: { age: 82 } }; let customerCity = customer?.city ?? "暗之城"; console.log(customerCity); // “暗之城”
短路計算
let a = null; let x = 0; let prop = a?.[x++]; console.log(x); // x 將不會被遞增,依舊輸出 0
js中?.、??的具體用法
1、?. (可選鏈運(yùn)算符)
在javascript中如果一個值為null、undefined,直接訪問下面的屬性,
會報 `Uncaught TypeError: Cannot read properties of undefined` 異常錯誤。
而在真實(shí)的項目中是會出現(xiàn)這種情況,有這個值就讀這個值,沒有這個值也不會報錯。
可能有的小伙伴會說用三目運(yùn)算符、或者if判斷,但是這種也是可以的,但是在特定情況下會很復(fù)雜(如obj.data.person.name)
而?.則完美解決這個問題(obj?.name?.person?.name)。
?. 可以無限鏈下去,不論有多少屬性,只要有最后可以訪問到屬性,就會直接賦值最后的屬性值。否則當(dāng)任何一個鏈出現(xiàn)問題,立刻停止,而后賦值undefined。
2、??(空值合并運(yùn)算符)
?? 雙問號后面是默認(rèn)值(可常量、可變量)。
在 ?? 前面沒有值得時候會默認(rèn) ?? 后邊的值(類似于三木運(yùn)算符中的:后面賦值)。
和 || 運(yùn)算符的區(qū)別:
|| 只會在左邊的值為假值時返回右邊的值 (0, ‘’, undefined, null, false 等都為假值)
?? 是在左邊的值為undefined或者null時才會返回右邊的值
總結(jié):??是判斷有沒有值,|| 是判斷真假
。
到此這篇關(guān)于js中“??“和“?.“怎么用?的文章就介紹到這了,更多相關(guān)js ?? 和?內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
淺析location.href跨窗口調(diào)用函數(shù)
本文詳細(xì)介紹了location.href跨窗口調(diào)用函數(shù),具體的使用方法及實(shí)例,有需要的朋友可以參考下2016-11-11eslint+prettier統(tǒng)一代碼風(fēng)格的實(shí)現(xiàn)方法
這篇文章主要介紹了eslint+prettier 統(tǒng)一代碼風(fēng)格的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-07-07頁面js遇到亂碼問題的解決方法是和無法轉(zhuǎn)碼的情況
在老項目里加些js文件和老項目的編碼格式不一致出現(xiàn)亂碼,由于兩個文件都不能轉(zhuǎn)格式,于是百度個不錯的方法在此與大家分享下2014-04-04JavaScript 檢測瀏覽器和操作系統(tǒng)的腳本
代碼轉(zhuǎn)自《Professional JavaScript™ for Web Developers》一書。2008-12-12實(shí)例學(xué)習(xí)JavaScript讀取和寫入cookie
本篇內(nèi)容主要給大家通過實(shí)例講述了JavaScript讀取和寫入cookie的相關(guān)知識點(diǎn),有這方面需要的朋友參考下吧。2018-01-01