如今
JavaScript具有許多強(qiáng)大的功能,我們可以在代碼中作為開發(fā)人員使用。這是因?yàn)?JavaScript創(chuàng)建者試圖添加盡可能多的功能,以使開發(fā)人員更容易編寫JavaScript代碼。
我經(jīng)??吹降墓δ苁沁壿嬤\(yùn)算符。在舊的JavaScript版本中,我們只有三個(gè)邏輯運(yùn)算符(or、and和not)。但是現(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)算符 ||檢查所有假值,而不僅僅是 null和 undefined 。
順便說一下,如果你不知道 JavaScript 中的假值是什么。在這里,我可以列舉一下,它們是:false 、 0、 null、 undefined、NaN、 -0、 0n 和""(空字符串)。
現(xiàn)在的問題是運(yùn)算符 ||并非在所有情況下都有用。因?yàn)樗鼤?huì)檢查并避免所有假值。例如,有時(shí)在我們的程序中需要 0和空字符串作為有效選項(xiàng)的情況。我們不能用 OR 運(yùn)算符做到這一點(diǎn)。
這就是無效合并運(yùn)算符發(fā)揮作用的原因。它只覆蓋 null 和 undefined。
這是一個(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 以及最舊版本的 Chrome和 Safari不支持空合并運(yùn)算符。但是,除Opera mobile 之外的所有最新版本都支持它。
結(jié)論
如你所見,空合并運(yùn)算符比你想象的要簡(jiǎn)單得多。它只覆蓋 null 和 undefined的值。我將始終推薦使用它,因?yàn)樗勾a更清晰且易于編寫。
感謝你閱讀這篇文章,希望你覺得它有用。