編程實(shí)務(wù)中清焕,如果讀取對(duì)象內(nèi)部的某個(gè)屬性,往往需要判斷一下該對(duì)象是否存在蝠猬。比如切蟋,要讀取message.body.user.firstName
统捶,安全的寫(xiě)法是寫(xiě)成下面這樣榆芦。
const firstName = (message
&& message.body
&& message.body.user
&& message.body.user.firstName) || 'default';
或者使用三元運(yùn)算符?:,判斷一個(gè)對(duì)象是否存在喘鸟。
const fooInput = myForm.querySelector('input[name=foo]')
const fooValue = fooInput ? fooInput.value : undefined
這樣的層層判斷非常麻煩匆绣,因此 ES2020 引入了“鏈判斷運(yùn)算符”(optional chaining operator)?.
,簡(jiǎn)化上面的寫(xiě)法什黑。
const firstName = message?.body?.user?.firstName || 'default';
const fooValue = myForm.querySelector('input[name=foo]')?.value
上面代碼使用了?.
運(yùn)算符崎淳,直接在鏈?zhǔn)秸{(diào)用的時(shí)候判斷,左側(cè)的對(duì)象是否為null
或undefined
愕把。如果是的拣凹,就不再往下運(yùn)算,而是返回undefined
恨豁。