詳解JavaScript中?.、??和??=的用法及使用場(chǎng)景
下面這個(gè)錯(cuò)誤,相信前端開發(fā)工程師應(yīng)該經(jīng)常遇到吧,要么是自己考慮不全造成的,要么是后端開發(fā)人員丟失數(shù)據(jù)或者傳輸錯(cuò)誤數(shù)據(jù)類型造成的。因此對(duì)數(shù)據(jù)訪問時(shí)的非空判斷就變成了一件很繁瑣且重要的事情,下面就介紹ES6一些新的語法來方便我們開發(fā)。
1. 可選鏈操作符 (Optional Chaining Operator - ?.)
可選鏈操作符允許您在訪問對(duì)象屬性或調(diào)用函數(shù)時(shí),檢查中間的屬性是否存在或?yàn)?null/undefined。如果中間的屬性不存在或?yàn)榭?,表達(dá)式將短路返回 undefined,而不會(huì)引發(fā)錯(cuò)誤。
1.1 用法示例
const obj = { foo: { bar: { baz: 42 } } }; // 使用可選鏈操作符 const value = obj?.foo?.bar?.baz; // 如果任何中間屬性不存在或?yàn)榭?,value 將為 undefined // 傳統(tǒng)寫法 const value = obj && obj.foo && obj.foo.bar && obj.foo.bar.baz; // 需要手動(dòng)檢查每個(gè)屬性
1.2 使用場(chǎng)景
鏈?zhǔn)皆L問對(duì)象屬性,而不必手動(dòng)檢查每個(gè)屬性是否存在。
調(diào)用可能不存在的函數(shù)。
2. 空值合并操作符 (Nullish Coalescing Operator - ??)
空值合并操作符用于選擇性地提供默認(rèn)值,僅當(dāng)變量的值為 null 或 undefined 時(shí),才返回提供的默認(rèn)值。否則,它將返回變量的實(shí)際值。
2.1 用法示例
const foo = null; const bar = undefined; const baz = 0; const qux = ''; cosnt xyz = false; const value1 = foo ?? 'default'; // 'default',因?yàn)?foo 是 null const value2 = bar ?? 'default'; // 'default',因?yàn)?bar 是 undefined const value3 = baz ?? 'default'; // 0,因?yàn)?baz 不是 null 或 undefined const value4 = qux ?? 'default'; // '',因?yàn)?qux 不是 null 或 undefined const value5 = xyz ?? 'default'; // false,因?yàn)?xyz 不是 null 或 undefined //可能存在的傳統(tǒng)寫法,除了null,undefined, 無法兼容0、''、false的情況,使用時(shí)要特別小心 const value1 = foo || 'default'; // 'default' const value2 = bar || 'default'; // 'default' const value3 = baz || 'default'; // 'default',因?yàn)?0 轉(zhuǎn)布爾類型是 false const value4 = qux || 'default'; // 'default',因?yàn)?'' 轉(zhuǎn)布爾類型是 false const value5 = xyz || 'default'; // 'default'
2.2 使用場(chǎng)景
提供默認(rèn)值,而不使用 falsy 值(如空字符串、0 等)。
在處理可能為 null 或 undefined 的變量時(shí),選擇性地提供備用值。
3. 空值合并賦值操作符 (Nullish Coalescing Assignment Operator - ??=)
空值合并賦值操作符結(jié)合了空值合并操作符和賦值操作符。它用于將默認(rèn)值分配給變量,僅當(dāng)變量的值為 null 或 undefined 時(shí)。
3.1 用法示例
let foo = null; let bar = undefined; let baz = 0; foo ??= 'default'; // 'default',因?yàn)?foo 是 null bar ??= 'default'; // 'default',因?yàn)?bar 是 undefined baz ??= 'default'; // 0,因?yàn)?baz 的初始值不是 null 或 undefined
3.2 使用場(chǎng)景
在變量沒有被賦值或被賦值為 null 或 undefined 時(shí),將默認(rèn)值分配給變量。
4. 注意
這些運(yùn)算符在處理可能為 null 或 undefined 的值時(shí)非常有用,可以簡化代碼并提高可讀性。然而,需要注意的是,它們是在 ECMAScript 2020 標(biāo)準(zhǔn)中引入的,因此在舊版本的 JavaScript 中可能不被支持。
到此這篇關(guān)于詳解JavaScript中?.、??和??=的用法及使用場(chǎng)景的文章就介紹到這了,更多相關(guān)JS ?. 和??和??=內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
javascript 通用簡單的table選項(xiàng)卡實(shí)現(xiàn)
鑒于UI妹妹每次交付過來的選項(xiàng)卡都夾帶了多多少少的js,而且每遇到選項(xiàng)卡就加一點(diǎn)js,造成垃圾低劣代碼逐漸堆積過多了,一直想做一個(gè)通用簡潔的選項(xiàng)卡庫。2010-05-05JavaScript將字符串轉(zhuǎn)換成字符編碼列表的方法
這篇文章主要介紹了JavaScript將字符串轉(zhuǎn)換成字符編碼列表的方法,實(shí)例分析了javascript中charCodeAt函數(shù)的使用技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下2015-03-03js樹插件zTree獲取所有選中節(jié)點(diǎn)數(shù)據(jù)的方法
這篇文章主要介紹了js樹插件zTree獲取所有選中節(jié)點(diǎn)數(shù)據(jù)的方法,是對(duì)js樹插件zTree非常實(shí)用的操作,需要的朋友可以參考下2015-01-01JS實(shí)現(xiàn)斐波那契數(shù)列的五種方式(小結(jié))
這篇文章主要介紹了JS實(shí)現(xiàn)斐波那契數(shù)列的五種方式(小結(jié)),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-09-09js求數(shù)組中全部數(shù)字可拼接出的最大整數(shù)示例代碼
這篇文章主要給大家介紹了利用js如何求數(shù)組中全部數(shù)字可拼接出的最大整數(shù),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考借鑒,下面隨著小編一起來學(xué)習(xí)學(xué)習(xí)吧。2017-08-08js獲取元素到可視區(qū)的距離、瀏覽器窗口滾動(dòng)距離及元素距離瀏覽器頂部距離
這篇文章主要給大家介紹了關(guān)于js獲取元素到可視區(qū)的距離、瀏覽器窗口滾動(dòng)距離及元素距離瀏覽器頂部距離的相關(guān)資料,文中通過代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2023-11-11微信小程序頁面滑動(dòng)屏幕加載數(shù)據(jù)效果
這篇文章主要為大家詳細(xì)介紹了微信小程序頁面滑動(dòng)屏幕加載數(shù)據(jù)效果,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-08-08談?wù)凧avaScript異步函數(shù)發(fā)展歷程
對(duì)大部分JavaScript開發(fā)者而言,async函數(shù)仍是新鮮事物,其發(fā)展經(jīng)歷了漫長的旅程。本文將梳理總結(jié)JavaScript異步函數(shù)的發(fā)展歷程,并表示未來async函數(shù)將成為實(shí)現(xiàn)異步的主要方式。2015-09-09