什么是可選鏈?zhǔn)讲僮鞣?
可選鏈操作符( ?.
)允許讀取位于連接對象鏈深處的屬性的值,而不必明確驗(yàn)證鏈中的每個(gè)引用是否有效。?. 操作符的功能類似于 . 鏈?zhǔn)讲僮鞣?,不同之處在于,在引用為?nullish
) (null
或者 undefined
) 的情況下不會(huì)引起錯(cuò)誤,該表達(dá)式短路返回值是 undefined。與函數(shù)調(diào)用一起使用時(shí),如果給定的函數(shù)不存在,則返回 undefined
。
當(dāng)嘗試訪問可能不存在的對象屬性時(shí),可選鏈操作符將會(huì)使表達(dá)式更短、更簡明。在探索一個(gè)對象的內(nèi)容時(shí),如果不能確定哪些屬性必定存在,可選鏈操作符也是很有幫助的。
const adventurer = { name: 'Alice', cat: { name: 'Dinah' } }; const dogName = adventurer.dog?.name; console.log(dogName); // expected output: undefined console.log(adventurer.someNonExistentMethod?.()); // expected output: undefined
短路效應(yīng)
如果 ?.
左邊部分不存在,就會(huì)立即停止運(yùn)算(“短路效應(yīng)”)。
所以,如果后面有任何函數(shù)調(diào)用或者副作用,它們均不會(huì)執(zhí)行。
let user = null; let x = 0; user?.sayHi(x++); // 沒有 "sayHi",因此代碼執(zhí)行沒有觸達(dá) x++ alert(x); // 0,值沒有增加
Vue3源碼中為什么不采用這么方便的操作符