JS的空值合并運(yùn)算符(??)的使用
前言
空值合并運(yùn)算符(??)是一個(gè)邏輯運(yùn)算符
,當(dāng)左側(cè)的操作數(shù)為null
或undefined
時(shí),會(huì)返回右側(cè)操作數(shù),否則返回左側(cè)操作數(shù)。
與邏輯或運(yùn)算符(||)的區(qū)別
邏輯或運(yùn)算符(||)是一個(gè)布爾邏輯運(yùn)算符
,即當(dāng)左側(cè)操作數(shù)會(huì)被強(qiáng)制轉(zhuǎn)為布爾值,所有假值(“”,0,NaN,null,undefined)都會(huì)隱式轉(zhuǎn)換為false時(shí),此時(shí)會(huì)返回右側(cè)操作數(shù)??墒钱?dāng) 0,""和NaN 需要當(dāng)做有效值時(shí),邏輯或運(yùn)算符(||)會(huì)導(dǎo)致以下錯(cuò)誤:
let count = 0; let text = ""; let res = count || 42; let message = text || "hi!"; console.log(res); // 42,而不是 0 console.log(message); // "hi!",而不是 ""
相比邏輯或運(yùn)算符(||),空值合并運(yùn)算符(??),如果左側(cè)操作數(shù)為0,“”,NaN,也會(huì)被返回。
let count = 0; let text = ""; let res = count ?? 42; let message = text ?? "hi!"; console.log(res); // 0 console.log(message); // ""
總結(jié)
當(dāng)你需要 0,""和NaN 作為有效值時(shí),使用空值合并運(yùn)算符(??),否則使用邏輯或運(yùn)算符(||)。
與 OR(||) 和 AND(&&) 運(yùn)算符
與 OR 和 AND 邏輯運(yùn)算符相似,當(dāng)左表達(dá)式不為 null
或 undefined
時(shí),短路,不會(huì)對(duì)右表達(dá)式進(jìn)行求值。
function A() { console.log("函數(shù) A 被調(diào)用了"); return undefined; } function B() { console.log("函數(shù) B 被調(diào)用了"); return false; } function C() { console.log("函數(shù) C 被調(diào)用了"); return "foo"; } console.log(A() ?? C()); // 依次打印 "函數(shù) A 被調(diào)用了"、"函數(shù) C 被調(diào)用了"、"foo" // A() 返回了 undefined,所以運(yùn)算符兩邊的表達(dá)式都被執(zhí)行了 console.log(B() ?? C()); // 依次打印 "函數(shù) B 被調(diào)用了"、"false" // B() 返回了 false(既不是 null 也不是 undefined) // 所以右側(cè)表達(dá)式?jīng)]有被執(zhí)行
不能與 OR 和 AND 運(yùn)算符共用
??
不能與 AND(&&
)和 OR(||
)運(yùn)算符組合使用。會(huì)拋出語(yǔ)法錯(cuò)誤(因?yàn)榭罩岛喜⑦\(yùn)算符和其他邏輯運(yùn)算符之間的運(yùn)算優(yōu)先級(jí)/運(yùn)算順序是未定義的)。
錯(cuò)誤寫法:
null || undefined ?? "666"; // 拋出 SyntaxError true || undefined ?? "666"; // 拋出 SyntaxError
但是,如果配合括號(hào)來(lái)顯示表明運(yùn)算優(yōu)先級(jí),是可行的。
(null || undefined) ?? "666"; // 返回 "666"
實(shí)例
const nullValue = null; const emptyText = ""; // 空字符串,是一個(gè)假值,Boolean("") === false const someNumber = 42; const valA = nullValue ?? "valA 的默認(rèn)值"; const valB = emptyText ?? "valB 的默認(rèn)值"; const valC = someNumber ?? 0; console.log(valA); // "valA 的默認(rèn)值" console.log(valB); // ""(空字符串雖然是假值,但不是 null 或者 undefined) console.log(valC); // 42
使用場(chǎng)景
antd組件庫(kù)
select
組件的placeholder
屬性,只有當(dāng)值為null或undefined時(shí)才會(huì)展示,如果 0,""和NaN 為有效值,空值合并運(yùn)算符(??)就適用于判斷value。
如上只是一個(gè)簡(jiǎn)單舉例,空值合并運(yùn)算符(??)適用于一切 0,""和NaN 為有效值的場(chǎng)景。
到此這篇關(guān)于JS的空值合并運(yùn)算符(??)的使用的文章就介紹到這了,更多相關(guān)JS 空值合并運(yùn)算符內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
在IE6下發(fā)生Internet Explorer cannot open the Internet site錯(cuò)誤
最近在IE6下面時(shí)常會(huì)發(fā)生“Internet Explorer cannot open the Internet site ”錯(cuò)誤。2010-06-06javascript如何判斷數(shù)組內(nèi)元素是否重復(fù)的方法集錦
javascript如何判斷數(shù)組內(nèi)元素是否重復(fù)的方法集錦...2007-02-02javascript把15位身份證轉(zhuǎn)成18的函數(shù)
非常不錯(cuò)的,看了這個(gè)大家就明白身份證的運(yùn)算規(guī)則了2008-10-10js實(shí)現(xiàn)卡片式項(xiàng)目管理界面UI設(shè)計(jì)效果
這篇文章主要介紹了js實(shí)現(xiàn)卡片式項(xiàng)目管理界面UI設(shè)計(jì)效果,該UI設(shè)計(jì)中,將各個(gè)項(xiàng)目以卡片的方式堆疊排列在屏幕上,當(dāng)點(diǎn)擊了其中的某個(gè)項(xiàng)目的時(shí)候,該項(xiàng)目圖片會(huì)全屏放大,向下滾動(dòng)鼠標(biāo)可以看到該項(xiàng)目的介紹信息,需要的朋友可以參考下2015-12-12微信小程序input抖動(dòng)問(wèn)題的修復(fù)方法
這篇文章主要給大家介紹了關(guān)于微信小程序input抖動(dòng)問(wèn)題的修復(fù)方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2021-03-03javascript實(shí)現(xiàn)可全選、反選及刪除表格的方法
這篇文章主要介紹了javascript實(shí)現(xiàn)可全選、反選及刪除表格的方法,實(shí)例展示了javascript針對(duì)表格全選、反選、刪除、隔行變色、刪除提示等常用技巧,非常具有實(shí)用價(jià)值,需要的朋友可以參考下2015-05-05JavaScript面試中??嫉淖址僮鞣椒ù笕?包含ES6)
對(duì)于JavaScript字符串操作方法,你真的全部掌握了嗎?來(lái)看看這篇面試中常考的字符串操作大全,包含最新的ES6字符串操作方法,值得收藏哦2020-05-05js querySelector和getElementById通過(guò)id獲取元素的區(qū)別
這是sina同事xiaoniu發(fā)現(xiàn)的,querySelector和getElementById通過(guò)id獲取元素的區(qū)別2012-04-04