最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

JavaScript空值處理的最佳實踐指南

 更新時間:2026年03月01日 16:11:54   作者:xixixin_  
早期我們常用 ||(邏輯或)實現(xiàn),但它常會把 0、空字符串 、false 這類合法假值誤判為空值,導致業(yè)務邏輯出錯,本文從 || 到??,給大家介紹了JavaScript空值處理的最佳實踐指南,需要的朋友可以參考下

在前端開發(fā)中,“給變量設置默認值”“處理空值兜底” 是高頻場景

早期我們常用 ||(邏輯或)實現(xiàn),但它常會把 0、空字符串 ''、false 這類 “合法假值” 誤判為 “空值”,導致業(yè)務邏輯出錯

ES2020 推出的 ??(空值合并

一、?? 是什么?核心規(guī)則一眼懂

?? 全稱 “Nullish Coalescing Operator(空值合并運算符)”,是 ES2020 新增的語法,核心作用是:僅當左側(cè)操作數(shù)為 nullundefined 時,才返回右側(cè)的默認值;否則返回左側(cè)值。

運算符)完美解決了這個問題,成為處理空值的最佳實踐。

const result = 左側(cè)值 ?? 右側(cè)默認值;

核心判定規(guī)則

左側(cè)值運算結(jié)果說明
null右側(cè)默認值僅空值觸發(fā)兜底
undefined右側(cè)默認值僅空值觸發(fā)兜底
00保留合法假值
''(空字符串)''保留合法假值
falsefalse保留合法假值
123/'abc'左側(cè)值本身非空值直接返回

二、?? vs ||(為什么說 || 容易踩坑?)

新手最容易混淆 ??||,但二者的判定邏輯差異極大 ——|| 基于 “布爾真假” 判斷,?? 基于 “是否為空值(null/undefined)” 判斷,這也是 || 頻繁出 bug 的核心原因。

實戰(zhàn)對比:業(yè)務場景中的坑

假設我們做一個 “商品數(shù)量展示” 功能,用戶輸入數(shù)量為 0 時,需要顯示 0 而非默認值,用 || 就會出錯:

// 業(yè)務需求:僅當用戶未輸入數(shù)量(null/undefined)時,默認顯示 1
const userInput = 0; // 用戶明確輸入0件商品

// 錯誤寫法:|| 把 0 判定為假值,返回默認值 1
const countBad = userInput || 1; 
console.log(countBad); // 輸出 1(不符合預期)

// 正確寫法:?? 僅判斷 null/undefined,保留 0
const countGood = userInput ?? 1;
console.log(countGood); // 輸出 0(符合預期)

再比如 “用戶昵稱” 場景,用戶可能設置空字符串作為昵稱,|| 會錯誤覆蓋:

const userName = ''; // 用戶主動設置空昵稱
const nameBad = userName || '未知用戶'; // 輸出 '未知用戶'(錯誤)
const nameGood = userName ?? '未知用戶'; // 輸出 ''(正確)

核心區(qū)別總結(jié)

特性?? 運算符|| 運算符
判斷依據(jù)是否為 null/undefined是否為 “假值”(0/''/false 等)
適用場景精準空值兜底所有假值兜底
業(yè)務安全性高(不覆蓋合法假值)低(易誤判合法假值)

三、?? 的高頻實戰(zhàn)場景

?? 不是單純的 “語法糖”,而是精準解決業(yè)務問題的工具,以下是前端開發(fā)中最常用的 3 個場景:

場景 1:嵌套屬性安全訪問 + 兜底(結(jié)合可選鏈?.)

開發(fā)中常需要訪問 obj.a.b.c 這類嵌套屬性,直接訪問易報錯,結(jié)合 ?.?? 可實現(xiàn) “安全訪問 + 兜底”:

// 需求:獲取用戶年齡,無則默認 18
const user = { info: { age: 0 } }; // 用戶年齡為 0(合法值)

// 安全寫法:?. 避免層級不存在報錯,?? 僅兜底 null/undefined
const age = user?.info?.age ?? 18;
console.log(age); // 輸出 0(保留合法值)

// 如果 user 無 info 屬性:
const user2 = {};
const age2 = user2?.info?.age ?? 18;
console.log(age2); // 輸出 18(兜底生效)

場景 2:多優(yōu)先級兜底(鏈式??)

業(yè)務中常需要 “優(yōu)先取 A,無則取 B,再無則取默認值”,鏈式 ?? 可簡潔實現(xiàn):

// 需求:門店功能項優(yōu)先取狀態(tài)2,無則取1,再無則返回默認值
const getTarget = (store) => {
  return store.storeFun?.find(vo => vo.storeStatus === 2)
    ?? store.storeFun?.find(vo => vo.storeStatus === 1)
    ?? { storeCode: '默認門店' };
};

// 測試:有2則返回2
const store1 = { storeFun: [{ storeStatus: 2, storeCode: 'code2' }] };
console.log(getTarget(store1).storeCode); // 輸出 code20

// 測試:無2有1則返回1
const store2 = { storeFun: [{ storeStatus: 1, storeCode: 'code1' }] };
console.log(getTarget(store2).storeCode); // 輸出 code1

// 測試:無2無1則返回默認
const store3 = { storeFun: [] };
console.log(getTarget(store3).storeCode); // 輸出 默認門店

場景 3:函數(shù)參數(shù)默認值(替代 ES6 參數(shù)默認值的局限)

ES6 函數(shù)參數(shù)默認值僅在參數(shù)為 undefined 時生效,但結(jié)合 ?? 可更靈活:

// 需求:函數(shù)參數(shù)為 null/undefined 時用默認值,0/'' 保留
function calculate(price = 100) {
  // 傳統(tǒng)參數(shù)默認值:僅 undefined 生效,null 會被保留
  console.log(price);
}
calculate(null); // 輸出 null(不符合預期)

// 優(yōu)化:用 ?? 兜底 null/undefined
function calculateBetter(price) {
  const finalPrice = price ?? 100;
  console.log(finalPrice);
}
calculateBetter(null); // 輸出 100(符合預期)
calculateBetter(0); // 輸出 0(保留合法值)

四、總結(jié)

?? 運算符的出現(xiàn),填補了 JavaScript 精準處理 “空值” 的空白 —— 它既解決了 || 誤判合法假值的問題,又比手動判斷 null/undefined 更簡潔。在實際開發(fā)中,推薦遵循以下原則:

需精準兜底(僅 null/undefined)→ 用 ??;

需兜底所有假值 → 用 ||;

掌握 ?? 不僅能減少業(yè)務 bug,還能讓代碼更簡潔、語義更清晰,是前端開發(fā)者必備的 ES2020 特性之一。

不能直接和 && / || 混用(不加括號)JS 不允許無括號的混合運算,會拋出語法錯誤,需用括號明確優(yōu)先級:

// 錯誤寫法
const result = a && b ?? c;
// 正確寫法
const result = (a && b) ?? c;

瀏覽器兼容性?? 是 ES2020 特性,現(xiàn)代瀏覽器(Chrome 80+/Firefox 72+/Edge 80+)已支持,如需兼容低版本,可通過 Babel 轉(zhuǎn)譯(配置 @babel/plugin-proposal-nullish-coalescing-operator)。

不要過度使用僅當需要 “區(qū)分 null/undefined 和其他假值” 時使用 ??;如果需要判斷所有假值(比如 “空值就顯示默認”),用 || 更合適。

嵌套屬性訪問 → 結(jié)合 ?. + ??,安全又精準。 

以上就是JavaScript空值處理的最佳實踐指南的詳細內(nèi)容,更多關于JavaScript空值處理的資料請關注腳本之家其它相關文章!

相關文章

  • JS前端組件設計以業(yè)務為導向?qū)嵺`思考

    JS前端組件設計以業(yè)務為導向?qū)嵺`思考

    這篇文章主要為大家介紹了JS前端組件設計以業(yè)務為導向?qū)嵺`思考,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-03-03
  • three.js實現(xiàn)炫酷的全景3D重力感應

    three.js實現(xiàn)炫酷的全景3D重力感應

    這篇文章主要為大家詳細介紹了three.js實現(xiàn)炫酷的全景3D重力感應,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-12-12
  • TypeScript裝飾器的作用、結(jié)構(gòu)、類型及其應用場景(代碼示例)

    TypeScript裝飾器的作用、結(jié)構(gòu)、類型及其應用場景(代碼示例)

    文章介紹了裝飾器的作用、結(jié)構(gòu)、類型及其應用場景,裝飾器是一種特殊類型的聲明,可以附加到類、方法、訪問符、屬性或參數(shù)上,通過在不改變原有代碼的情況下擴展功能,文章還提供了裝飾器的具體實現(xiàn)示例,包括類裝飾器、方法裝飾器、參數(shù)裝飾器和屬性裝飾器
    2026-02-02
  • js實現(xiàn)簡單的貪吃蛇游戲

    js實現(xiàn)簡單的貪吃蛇游戲

    這篇文章主要為大家詳細介紹了js實現(xiàn)簡單的貪吃蛇游戲,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-04-04
  • Webpack中使用環(huán)境變量的各種正確姿勢

    Webpack中使用環(huán)境變量的各種正確姿勢

    我們在開發(fā)項目中都會遇到這種場景,區(qū)分開發(fā)環(huán)境、生產(chǎn)環(huán)境、測試環(huán)境,不同場景請求不同的接口Api,這時候項目中配置的「環(huán)境變量」就登場啦,這篇文章主要給大家介紹了關于Webpack中使用環(huán)境變量的各種正確姿勢,需要的朋友可以參考下
    2021-09-09
  • tkinter使用js的canvas實現(xiàn)漸變色

    tkinter使用js的canvas實現(xiàn)漸變色

    這篇文章主要為大家介紹了tkinter使用canvas實現(xiàn)漸變色,具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2021-12-12
  • JavaScript逐點突破系列之this是什么

    JavaScript逐點突破系列之this是什么

    本章將專門介紹與執(zhí)行上下文創(chuàng)建階段直接相關的最后一個細節(jié)——this是什么?以及它的指向到底是什么,感興趣的朋友跟隨小編一起看看吧
    2021-04-04
  • js中top的作用深入剖析

    js中top的作用深入剖析

    本篇文章主要是對js中top的作用進行了深入的介紹,需要的朋友可以過來參考下,希望對大家有所幫助
    2014-03-03
  • 兼容最新firefox、chrome和IE的javascript圖片預覽實現(xiàn)代碼

    兼容最新firefox、chrome和IE的javascript圖片預覽實現(xiàn)代碼

    這篇文章主要介紹了兼容最新firefox、chrome和IE的javascript圖片預覽實現(xiàn)代碼,測試了瀏覽器firefox6、firefox12、chrome 25.0.1364.172 m、IE6-IE10 都兼容,需要的朋友可以參考下
    2014-08-08
  • bootstrap table表格使用方法詳解

    bootstrap table表格使用方法詳解

    這篇文章主要為大家詳細介紹了bootstrap table表格使用方法,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-04-04

最新評論

西和县| 宜春市| 乌苏市| 宜良县| 霍山县| 腾冲县| 青河县| 友谊县| 莱西市| 内江市| 都江堰市| 安图县| 涿鹿县| 南昌市| 衢州市| 阿城市| 永川市| 潮安县| 平顶山市| 怀化市| 涟水县| 乡宁县| 临潭县| 祁阳县| 永吉县| 安多县| 汤阴县| 包头市| 伊宁市| 宜章县| 芮城县| 玛多县| 衡阳市| 长治市| 甘洛县| 县级市| 舞阳县| 阿拉善盟| 泸溪县| 莎车县| 新丰县|