空值合并運(yùn)算符(??)

今天給大家分享空值合并運(yùn)算符(??)
官方在 ES2020 版本里就出了一個(gè)叫“空值合并運(yùn)算符”的東西,官方的解釋是:
空值合并操作符(??)是一個(gè)邏輯操作符,當(dāng)左側(cè)的操作數(shù)為?null?或者?undefined?時(shí),返回其右側(cè)操作數(shù),否則返回左側(cè)操作數(shù)。
mdn
語法:
????leftExpr ?? rightExpr
應(yīng)用1:為常量提供默認(rèn)值
使用空值合并運(yùn)算符為常量提供默認(rèn)值,保證常量不為?null
?或者?undefined
。
應(yīng)用2:為變量賦默認(rèn)值
如果想為一個(gè)變量賦默認(rèn)值,通常的做法是使用邏輯或運(yùn)算符(||)
然而,由于?||
?是一個(gè)布爾邏輯運(yùn)算符,左側(cè)的操作數(shù)會(huì)被強(qiáng)制轉(zhuǎn)換成布爾值用于求值。任何假值(0
,?''
,?NaN
,?null
,?undefined
)都不會(huì)被返回。這導(dǎo)致如果你使用0
,''
或NaN
作為有效值,就會(huì)出現(xiàn)不可預(yù)料的后果。如下:
空值合并運(yùn)算符可以避免這種陷阱,其只在第一個(gè)操作數(shù)為null 或 undefined 時(shí)(而不是其它假值)返回第二個(gè)操作數(shù):
應(yīng)用3:短路
與 OR 和 AND 邏輯運(yùn)算符相似,當(dāng)左表達(dá)式不為 null 或 undefined 時(shí),不會(huì)對右表達(dá)式進(jìn)行求值。
應(yīng)用4:不能與 AND 或 OR 運(yùn)算符共用
將 ?? 直接與 AND(&&)和 OR(||)運(yùn)算符組合使用是不可取的。(譯者注:應(yīng)當(dāng)是因?yàn)榭罩岛喜⑦\(yùn)算符和其他邏輯運(yùn)算符之間的運(yùn)算優(yōu)先級/運(yùn)算順序是未定義的)這種情況下會(huì)拋出 SyntaxError 。
但是,如果使用括號來顯式表明運(yùn)算優(yōu)先級,是沒有問題的:
應(yīng)用5:與可選鏈?zhǔn)竭\(yùn)算符(?.
)的關(guān)系
空值合并運(yùn)算符針對 undefined 與 null 這兩個(gè)值,可選鏈?zhǔn)竭\(yùn)算符(?.) 也是如此。在這訪問屬性可能為 undefined 與 null 的對象時(shí),可選鏈?zhǔn)竭\(yùn)算符非常有用。
茍有恒?,?何必三更眠五更起
關(guān)注我,一起學(xué)習(xí)吧
