JavaScript可選鏈的實(shí)現(xiàn)示例
注:本節(jié)仍然使用之前的飯店的對(duì)象,可以看上幾篇文章查看代碼
如果我們想要看看飯店周一的開(kāi)門(mén)時(shí)間,我們會(huì)這么寫(xiě)
console.log(restaurant.openingHours.mon.open);
原因是我們?cè)陂_(kāi)放時(shí)間中并沒(méi)有定義周一的開(kāi)放時(shí)間,所有會(huì)報(bào)錯(cuò);
那我們?cè)撊绾谓鉀Q呢,之前我們可能會(huì)添加一個(gè)IF語(yǔ)句來(lái)解決,例如
if (restaurant.openingHours.mon) console.log(restaurant.openingHours.mon.open);
這樣確實(shí)能解決,但是這時(shí)候我們好像不僅需要判斷mon存不存在,我們可能還需要去判斷openingHours存不存在,那么我們可能還會(huì)這么寫(xiě)
if (restaurant.openingHours && restaurant.openingHours.mon) console.log(restaurant.openingHours.mon.open);
這樣就太過(guò)于復(fù)雜了,判斷太多,代碼不簡(jiǎn)潔
ES2020,引入了可選鏈接
上面的代碼可以這樣寫(xiě)
console.log(restaurant.openingHours.mon?.open);
當(dāng)然,可選連接也可以多層可選
console.log(restaurant.openingHours?.mon?.open);
真實(shí)
如果我們不知道飯店周幾開(kāi)門(mén),也不知道周幾的幾點(diǎn)開(kāi)門(mén),我們可以逐一的去判斷
首先我們創(chuàng)建一個(gè)周一到周日的數(shù)組
const days = ['mon','the','wed','thu','fri','sat','sun'];
然后通過(guò)我們之前學(xué)習(xí)的for-of去將數(shù)組的每一個(gè)數(shù)據(jù)循環(huán)出來(lái)
for (const day of days) { console.log(day); }
接著我們就可以通過(guò)可選連接來(lái)進(jìn)行判斷,從來(lái)去得到開(kāi)門(mén)和關(guān)門(mén)的時(shí)間
for (const day of days) { const open = restaurant.openingHours[day]?.open; console.log(`${day}的開(kāi)門(mén)時(shí)間是${open}點(diǎn)`); }
這樣我們就可以一下看到周幾開(kāi)門(mén),開(kāi)門(mén)的時(shí)間是多久了
那如果我們不想讓不開(kāi)門(mén)的星期為undefined,怎么辦呢?向之前一樣,給他設(shè)置一個(gè)默認(rèn)值
for (const day of days) { const open = restaurant.openingHours[day]?.open ?? '不開(kāi)門(mén)'; console.log(`${day}的開(kāi)門(mén)時(shí)間是${open}點(diǎn)`); }
可選鏈判斷方法是否存在
console.log(restaurant.order?.(0,1) ?? "方法不存在"); console.log(restaurant.ordertest?.(0,1) ?? "方法不存在");
可選鏈判斷數(shù)組是否存在
const users = [{ name: 'jonas',email: 'example@jonas.com'}]; console.log(users[0]?.name ?? '用戶(hù)不存在');
總結(jié)
JavaScript中的可選鏈?zhǔn)且环N語(yǔ)法特性,用于簡(jiǎn)化訪問(wèn)嵌套對(duì)象屬性或調(diào)用嵌套函數(shù)的過(guò)程。它通過(guò)使用問(wèn)號(hào)(?)來(lái)判斷屬性或函數(shù)是否存在,避免了因?yàn)閷傩曰蚝瘮?shù)不存在而導(dǎo)致的錯(cuò)誤。
具體而言,可選鏈接使用問(wèn)號(hào)(?)來(lái)替代傳統(tǒng)的點(diǎn)號(hào)(.)或方括號(hào)([])語(yǔ)法,在訪問(wèn)屬性或調(diào)用函數(shù)時(shí)可以在鏈?zhǔn)綄傩灾g插入問(wèn)號(hào),以確保安全訪問(wèn)。如果鏈?zhǔn)街械哪硞€(gè)屬性或函數(shù)不存在,可選鏈接會(huì)返回 undefined 而不會(huì)拋出錯(cuò)誤,從而避免程序中斷。
到此這篇關(guān)于JavaScript可選鏈的實(shí)現(xiàn)示例的文章就介紹到這了,更多相關(guān)JavaScript可選鏈內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
JavaScript學(xué)習(xí)筆記之DOM基礎(chǔ)操作實(shí)例小結(jié)
這篇文章主要介紹了JavaScript學(xué)習(xí)筆記之DOM基礎(chǔ)操作,結(jié)合實(shí)例形式總結(jié)分析了javascript針對(duì)dom元素節(jié)點(diǎn)、屬性的相關(guān)獲取、設(shè)置等操作技巧,需要的朋友可以參考下2019-01-01Javascript實(shí)現(xiàn)運(yùn)算符重載詳解
本文給大家匯總介紹了Javascript實(shí)現(xiàn)運(yùn)算符重載的方法,實(shí)現(xiàn)的思路很簡(jiǎn)單,有需要的小伙伴可以來(lái)看看2018-04-04JavaScript中隨機(jī)數(shù)方法?Math.random()
這篇文章主要介紹了JavaScript中隨機(jī)數(shù)方法?Math.random(),文章圍繞主題展開(kāi)詳細(xì)的內(nèi)容介紹,具有一定的參考價(jià)值,需要的小伙伴可以參考一下2022-06-06前端面向?qū)ο缶幊讨瓻S5語(yǔ)法ES6語(yǔ)法詳解
這篇文章主要為大家介紹了前端面向?qū)ο缶幊讨瓻S5語(yǔ)法ES6語(yǔ)法詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-11-11一個(gè)用js實(shí)現(xiàn)的頁(yè)內(nèi)搜索代碼
一個(gè)用js實(shí)現(xiàn)的頁(yè)內(nèi)搜索代碼...2007-05-05實(shí)用javaScript技術(shù)-屏蔽類(lèi)
實(shí)用javaScript技術(shù)-屏蔽類(lèi)...2006-08-08JavaScript字符串轉(zhuǎn)數(shù)字的5種方法及遇到的坑
JavaScript是一個(gè)神奇的語(yǔ)言,字符串轉(zhuǎn)數(shù)字有5種方法,各有各的坑法!接下來(lái)通過(guò)本文給大家介紹JavaScript字符串轉(zhuǎn)數(shù)字的5種方法及其陷阱,感興趣的朋友一起看看吧2018-07-07