JavaScript中可選鏈(?.)用法示例詳解
簡(jiǎn)介
在JavaScript中,我們經(jīng)常需要處理JSON數(shù)據(jù)對(duì)象,而JSON數(shù)據(jù)對(duì)象的層級(jí)較深,處理其屬性值時(shí)就會(huì)顯得較為麻煩,此時(shí)可選鏈(Optional Chaining)就派上用場(chǎng)了。
可選鏈?zhǔn)且环N方便的語(yǔ)法糖,可以簡(jiǎn)化層級(jí)深的對(duì)象屬性訪問(wèn)的過(guò)程。也就是說(shuō),在訪問(wèn)一個(gè)對(duì)象中的屬性時(shí),如果該屬性不存在,我們將不必再像以前那樣判斷對(duì)象的每一層級(jí)是否存在這個(gè)屬性,而是使用可選鏈的方式直接訪問(wèn),代碼的可讀性和簡(jiǎn)潔性也得到了極大的提升。
下面舉個(gè)例子,假設(shè)我們有一個(gè)表示學(xué)生的json對(duì)象,里面包含了學(xué)生的姓名、年齡和地址等詳細(xì)信息?,F(xiàn)在我們需要使用一系列“.”來(lái)訪問(wèn)其中每個(gè)屬性,這時(shí)代碼就顯得很冗長(zhǎng):
const student = {
name: "張三",
age: 18,
address: {
province: "北京",
city: "朝陽(yáng)區(qū)",
street: "南湖東路1號(hào)"
}
};
let street = "";
if (student.address && student.address.province === "北京" && student.address.city === "朝陽(yáng)區(qū)") {
street = student.address.street;
}
console.log(street);上面的代碼中,我們使用了冗長(zhǎng)的if語(yǔ)句來(lái)驗(yàn)證是否存在地址信息,并且訪問(wèn)該地址的街道信息。
而使用可選鏈的方式,我們可以更加簡(jiǎn)潔的實(shí)現(xiàn):
const student = {
name: "張三",
age: 18,
address: {
province: "北京",
city: "朝陽(yáng)區(qū)",
street: "南湖東路1號(hào)"
}
};
const street = student?.address?.province === "北京" && student.address.city === "朝陽(yáng)區(qū)" ? student.address.street : "";
console.log(street);代碼中的 "?. " 是可選鏈操作符,它允許我們?cè)趯傩缘闹悼赡転?undefined 的情況下安全地訪問(wèn)對(duì)象的屬性。例如,在這個(gè)示例中,如果屬性 student.address 或 student.address.city 是 undefined,則最后的結(jié)果也將是 undefined,我們就無(wú)需再做逐個(gè)判斷了,更具可讀性。
另外一個(gè)細(xì)節(jié)是可選鏈問(wèn)號(hào) ? 只能用在點(diǎn) . 符號(hào)之前。如果前面的變量或表達(dá)式為 null 或 undefined,那么整個(gè)表達(dá)式的返回值就是 undefined。
值得注意的是,可選鏈操作符只在最新版的ES2020規(guī)范中被正式引入,在一些舊版本下可能會(huì)有不兼容的問(wèn)題。
和其它相似方法的區(qū)別
和可選鏈類似的語(yǔ)法糖還有其它一些方法,如“&&”,使用它們的方式和可選鏈有些許不同。
舉個(gè)例子,我們假設(shè)有一個(gè)user對(duì)象用于存儲(chǔ)人們的姓名和地址信息,其中address也是一個(gè)對(duì)象類型,里面包含了省市區(qū)等信息:
const user = {
name: "Amy",
address: {
province: "湖北省",
city: "武漢市",
area: "洪山區(qū)",
}
}
如果要獲取用戶所在區(qū)域,我們可以使用&&運(yùn)算符將它們連接起來(lái)實(shí)現(xiàn)類似于可選鏈?zhǔn)降脑L問(wèn)方式:
const area = user.address && user.address.area;// 洪山區(qū)
然而,這種方法在處理對(duì)象層次結(jié)構(gòu)較多的對(duì)象時(shí)會(huì)顯得很麻煩。在這種情況下,可選鏈會(huì)更加直觀和方便。
我們可以使用可選鏈,以更加簡(jiǎn)練和易于閱讀的方式來(lái)訪問(wèn)屬性:
const area = user?.address?.area
總結(jié)
使用可選鏈可以為寫代碼帶來(lái)更加直觀和方便的體驗(yàn)
以上就是JavaScript中可選鏈(?.)用法示例詳解的詳細(xì)內(nèi)容,更多關(guān)于JavaScript可選鏈(?.)用法的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
JS動(dòng)態(tài)給對(duì)象添加屬性和值的實(shí)現(xiàn)方法
下面小編就為大家?guī)?lái)一篇JS動(dòng)態(tài)給對(duì)象添加屬性和值的實(shí)現(xiàn)方法。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2016-10-10
JavaScript前端超時(shí)異步操作完美解決過(guò)程
這篇文章主要為大家介紹了JavaScript前端超時(shí)異步操作的完美解決方式,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步2021-11-11
JavaScript知識(shí)點(diǎn)總結(jié)(六)之JavaScript判斷變量數(shù)據(jù)類型
這篇文章主要介紹了JavaScript知識(shí)點(diǎn)總結(jié)(六)之JavaScript判斷變量數(shù)據(jù)類型的相關(guān)資料,非常不錯(cuò)具有參考借鑒價(jià)值,需要的朋友可以參考下2016-05-05
JS實(shí)現(xiàn)超過(guò)長(zhǎng)度限制后自動(dòng)跳轉(zhuǎn)下一款文本框的方法
這篇文章主要介紹了JS實(shí)現(xiàn)超過(guò)長(zhǎng)度限制后自動(dòng)跳轉(zhuǎn)下一款文本框的方法,涉及javascript操作字符及本文框的技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下2015-02-02
JavaScript內(nèi)置對(duì)象Math與String詳細(xì)介紹
這篇文章主要介紹了JavaScript內(nèi)置對(duì)象Math與String的介紹與使用,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2022-08-08
event對(duì)象獲取方法總結(jié)在google瀏覽器下測(cè)試
Event 對(duì)象代表事件的狀態(tài),比如事件在其中發(fā)生的元素、鍵盤按鍵的狀態(tài)、鼠標(biāo)的位置、鼠標(biāo)按鈕的狀態(tài),Event對(duì)象的獲取方法如下,感興趣的朋友可以參考下2013-11-11

