JS的空值合并運算符(??)的使用
前言
空值合并運算符(??)是一個邏輯運算符,當左側(cè)的操作數(shù)為null或undefined時,會返回右側(cè)操作數(shù),否則返回左側(cè)操作數(shù)。
與邏輯或運算符(||)的區(qū)別
邏輯或運算符(||)是一個布爾邏輯運算符,即當左側(cè)操作數(shù)會被強制轉(zhuǎn)為布爾值,所有假值(“”,0,NaN,null,undefined)都會隱式轉(zhuǎn)換為false時,此時會返回右側(cè)操作數(shù)??墒钱?0,""和NaN 需要當做有效值時,邏輯或運算符(||)會導(dǎo)致以下錯誤:
let count = 0; let text = ""; let res = count || 42; let message = text || "hi!"; console.log(res); // 42,而不是 0 console.log(message); // "hi!",而不是 ""
相比邏輯或運算符(||),空值合并運算符(??),如果左側(cè)操作數(shù)為0,“”,NaN,也會被返回。
let count = 0; let text = ""; let res = count ?? 42; let message = text ?? "hi!"; console.log(res); // 0 console.log(message); // ""
總結(jié)
當你需要 0,""和NaN 作為有效值時,使用空值合并運算符(??),否則使用邏輯或運算符(||)。
與 OR(||) 和 AND(&&) 運算符
與 OR 和 AND 邏輯運算符相似,當左表達式不為 null 或 undefined 時,短路,不會對右表達式進行求值。
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,所以運算符兩邊的表達式都被執(zhí)行了
console.log(B() ?? C());
// 依次打印 "函數(shù) B 被調(diào)用了"、"false"
// B() 返回了 false(既不是 null 也不是 undefined)
// 所以右側(cè)表達式?jīng)]有被執(zhí)行
不能與 OR 和 AND 運算符共用
?? 不能與 AND(&&)和 OR(||)運算符組合使用。會拋出語法錯誤(因為空值合并運算符和其他邏輯運算符之間的運算優(yōu)先級/運算順序是未定義的)。
錯誤寫法:
null || undefined ?? "666"; // 拋出 SyntaxError true || undefined ?? "666"; // 拋出 SyntaxError
但是,如果配合括號來顯示表明運算優(yōu)先級,是可行的。
(null || undefined) ?? "666"; // 返回 "666"
實例
const nullValue = null;
const emptyText = ""; // 空字符串,是一個假值,Boolean("") === false
const someNumber = 42;
const valA = nullValue ?? "valA 的默認值";
const valB = emptyText ?? "valB 的默認值";
const valC = someNumber ?? 0;
console.log(valA); // "valA 的默認值"
console.log(valB); // ""(空字符串雖然是假值,但不是 null 或者 undefined)
console.log(valC); // 42
使用場景
antd組件庫
select組件的placeholder屬性,只有當值為null或undefined時才會展示,如果 0,""和NaN 為有效值,空值合并運算符(??)就適用于判斷value。
如上只是一個簡單舉例,空值合并運算符(??)適用于一切 0,""和NaN 為有效值的場景。
到此這篇關(guān)于JS的空值合并運算符(??)的使用的文章就介紹到這了,更多相關(guān)JS 空值合并運算符內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Bootstrap3 Grid system原理及應(yīng)用詳解
這篇文章主要為大家詳細介紹了Bootstrap3 Grid system原理及應(yīng)用,具有一定的參考價值,感興趣的小伙伴們可以參考一下2016-09-09
JS回調(diào)函數(shù)原理與用法詳解【附PHP回調(diào)函數(shù)】
這篇文章主要介紹了JS回調(diào)函數(shù)原理與用法,結(jié)合實例形式詳細分析了JavaScript回調(diào)函數(shù)的概念、原理、用法,并給出了PHP回調(diào)函數(shù)的使用示例,需要的朋友可以參考下2019-07-07
js 實現(xiàn) input type="file" 文件上傳示例代碼
在開發(fā)中,文件上傳必不可少但是它長得又丑、瀏覽的字樣不能換,一般會讓其隱藏點其他的標簽(圖片等)來時實現(xiàn)選擇文件上傳功能2013-08-08
如何利用JavaScript讀取excel文件并繪制echarts圖形
這篇文章主要介紹了如何利用JavaScript讀取excel文件并繪制echarts圖形,文章通過excel財務(wù)報表,并且需要根據(jù)這張excel表繪制成各種echarts圖形,需要了解更多詳情的小伙伴可以參考一下文章內(nèi)內(nèi)容2022-05-05
微信小程序 函數(shù)防抖 解決重復(fù)點擊消耗性能問題實現(xiàn)代碼
這篇文章主要介紹了微信小程序使用函數(shù)防抖解決重復(fù)點擊消耗性能問題實現(xiàn)代碼,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習或者工作具有一定的參考學(xué)習價值,需要的朋友可以參考下2019-09-09

