4個(gè)未聽(tīng)說(shuō)過(guò)的強(qiáng)大JavaScript操作符
你有沒(méi)有花一個(gè)下午的時(shí)間來(lái)閱讀Mozilla的文檔?如果你有,你就會(huì)很清楚,網(wǎng)上有很多關(guān)于JavaScript的信息。這使得人們很容易忽視一些比較生僻的JavaScript操作符。
然而,這些操作符不常見(jiàn)并不意味著它們不強(qiáng)大! 它們各自在語(yǔ)法上看起來(lái)很相似,但一定要讀懂每一個(gè),因?yàn)樗鼈兊墓ぷ鞣绞讲煌?/p>
就讓我們一探究竟吧!
1. ?? 操作符
在JavaScript中,??運(yùn)算符被稱為nullish coalescing運(yùn)算符(零合并操作符)。如果第一個(gè)參數(shù)不是null/undefined,這個(gè)運(yùn)算符將返回第一個(gè)參數(shù),否則,它將返回第二個(gè)參數(shù)。我們來(lái)看一個(gè)例子。

上面我們創(chuàng)建了一個(gè)函數(shù)moneyAmount,負(fù)責(zé)返回用戶的當(dāng)前余額。我們使用了||操作符來(lái)識(shí)別沒(méi)有賬戶的用戶。然而,當(dāng)一個(gè)用戶沒(méi)有賬戶時(shí)是什么意思呢?更準(zhǔn)確的做法是將無(wú)賬戶視為null,而不是0,因?yàn)殂y行賬戶可以存在無(wú)(或負(fù))錢的情況。在上面的例子中,||操作符將0視為一個(gè)假值,因此沒(méi)有登記我們的用戶有一個(gè)0美元的賬戶。讓我們通過(guò)使用nullish coalescing操作符來(lái)解決這個(gè)問(wèn)題。

概括地說(shuō),??運(yùn)算符允許我們分配默認(rèn)值,同時(shí)忽略0和空字符串等錯(cuò)誤值。
2. ??=操作符
??=又被稱為邏輯空值賦值運(yùn)算符,與我們之前學(xué)習(xí)的內(nèi)容密切相關(guān)。我們來(lái)看看它們是如何聯(lián)系在一起的。

上述函數(shù)在處理空值時(shí)有一個(gè)值得注意的區(qū)別。默認(rèn)參數(shù)將覆蓋默認(rèn)值與null參數(shù),nullish賦值操作符不會(huì)。默認(rèn)參數(shù)和nullish賦值都不會(huì)覆蓋未定義的值。在這里閱讀更多內(nèi)容。
3. ?. 操作符
可選的鏈?zhǔn)讲僮鞣?. 允許開(kāi)發(fā)人員讀取深嵌在對(duì)象鏈中的屬性值,而不必顯式驗(yàn)證每個(gè)引用。當(dāng)一個(gè)引用為空時(shí),表達(dá)式停止計(jì)算并返回一個(gè)未定義的值。讓我們來(lái)看看一個(gè)例子。

我們現(xiàn)在創(chuàng)建了一個(gè)函數(shù),將plans添加到一個(gè)當(dāng)前沒(méi)有嵌套屬性 tuesday.location 的對(duì)象中。我們還使用了nullish運(yùn)算符來(lái)提供默認(rèn)值。這個(gè)函數(shù)將接受'0'這樣的虛值作為有效參數(shù)。這意味著我們的預(yù)算可以被設(shè)置為0,而不會(huì)出現(xiàn)任何錯(cuò)誤。
4. ? 操作符
三元運(yùn)算符 ? : 需要三個(gè)操作數(shù),一個(gè)條件為真時(shí)要執(zhí)行的表達(dá)式,以及一個(gè)條件為假時(shí)要執(zhí)行的表達(dá)式。讓我們來(lái)看看它的操作。


結(jié)論
我們現(xiàn)在已經(jīng)了解了這些運(yùn)算符能夠完成的基本原理。如果你覺(jué)得受到啟發(fā),想在這些例子的基礎(chǔ)上,在這里了解更多關(guān)于這些運(yùn)算符的信息。干杯!