實(shí)例講清JavaScript中的空合并運(yùn)算符

如今 JavaScript 具有許多強(qiáng)大的功能,我們可以在代碼中作為開發(fā)人員使用。這是因?yàn)?JavaScript創(chuàng)建者試圖添加盡可能多的功能,以使開發(fā)人員更容易編寫 JavaScript 代碼。
我經(jīng)??吹降墓δ苁沁壿嬤\(yùn)算符。在舊的 JavaScript 版本中,我們只有三個(gè)邏輯運(yùn)算符(or、andnot)。但是現(xiàn)在有了新的 ECMAScript 規(guī)范,我們擁有的遠(yuǎn)不止這些。諸如短路運(yùn)算符、可選鏈接和無效合并運(yùn)算符之類的東西。
這就是為什么在本文中,我們將學(xué)習(xí) JavaScript 中的 null 合并運(yùn)算符?,F(xiàn)在,讓我們開始吧。

什么是無效合并?

無效合并 ??JavaScript 中我們?cè)趦煞N數(shù)據(jù)類型之間使用的邏輯運(yùn)算符。
運(yùn)算符檢查兩種數(shù)據(jù)類型,如果第一種為空或未定義,則返回第二種數(shù)據(jù)類型。否則,如果第一個(gè)數(shù)據(jù)類型不為 null 且不為 undefined ,則返回第一個(gè)數(shù)據(jù)類型而不是第二個(gè)數(shù)據(jù)類型。

這是代碼語法的樣子:

firstData ?? secondData

使用空合并運(yùn)算符

在空合并運(yùn)算符 ?? 之前,我們必須使用 OR運(yùn)算符,如果我們想為變量提供默認(rèn)值||。如你所知,運(yùn)算符||有點(diǎn)類似于空合并運(yùn)算符。唯一的區(qū)別是 OR 運(yùn)算符 ||檢查所有假值,而不僅僅是 nullundefined 。

順便說一下,如果你不知道 JavaScript 中的假值是什么。在這里,我可以列舉一下,它們是:false0、 null、 undefinedNaN-0、 0n""(空字符串)。

現(xiàn)在的問題是運(yùn)算符 ||并非在所有情況下都有用。因?yàn)樗鼤?huì)檢查并避免所有假值。例如,有時(shí)在我們的程序中需要 0和空字符串作為有效選項(xiàng)的情況。我們不能用 OR 運(yùn)算符做到這一點(diǎn)。

這就是無效合并運(yùn)算符發(fā)揮作用的原因。它只覆蓋 nullundefined

這是一個(gè)比較 OR 運(yùn)算符和空合并運(yùn)算符的示例:

使用 OR 運(yùn)算符:

//Give an empty string as a name for a variable.
let name = "";
/*using the OR operator to give a default name(John) for our variable.*/
let setName = name || "John";
console.log(setName); //prints: "John" because "" is a falsy value.

使用空合并運(yùn)算符:

//Give an empty string as a name for a variable.
let name = "";
//using the nullish coalescing operator.
let setName = name ?? "Mehdi";
console.log(setName); /*prints: ""(empty string) because the first data type(name)is not null and not undefined.*/

如你所見,這就是兩個(gè)運(yùn)算符之間的區(qū)別??蘸喜⑦\(yùn)算符的好處在于它檢查第一個(gè)數(shù)據(jù)類型是 null 還是 undefined。如果是,則返回第二種數(shù)據(jù)類型。否則,它返回第一個(gè)數(shù)據(jù)類型。

這是另一個(gè)示例,可以讓你清楚地了解:

let name = "John";
let age = null;
let setName = name ?? "Mehdi";
console.log(setName); /*prints "John" because name is not null or undefined*/
let setAge = age ?? 21;
console.log(setAge); //prints 21 because age is null.

我們可以僅使用條件語句和 OR運(yùn)算符編寫上述相同的代碼,以向你展示空合并運(yùn)算符的工作原理以及為什么它更簡(jiǎn)潔、更短。

這是示例:

let name = "John";
let age = null;
let setName;
if(name === null || name === undefined){
 setName = "Mehdi";
}else{
 setName = name;
}
if(age === null || age === undefined){
 setAge = 21;
}else{
 setAge = age;
}
console.log(setName); //John
console.log(setAge); //21

這就是我們?nèi)绾问褂脳l件實(shí)現(xiàn)同樣的事情。這比使用 null合并運(yùn)算符要困難得多,而且代碼對(duì)我來說也不簡(jiǎn)潔。這就是為什么在這種情況下推薦使用 null 合并運(yùn)算符的原因。

瀏覽器支持情況

IE 以及最舊版本的 ChromeSafari不支持空合并運(yùn)算符。但是,除Opera mobile 之外的所有最新版本都支持它。

結(jié)論

如你所見,空合并運(yùn)算符比你想象的要簡(jiǎn)單得多。它只覆蓋 nullundefined的值。我將始終推薦使用它,因?yàn)樗勾a更清晰且易于編寫。

感謝你閱讀這篇文章,希望你覺得它有用。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容