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

JavaScript空值合并運(yùn)算符??使用場(chǎng)景

 更新時(shí)間:2025年09月05日 08:50:13   作者:掘鐵  
這篇文章主要介紹了JavaScript空值合并運(yùn)算符??的相關(guān)資料,??是一個(gè)js邏輯操作符,當(dāng)左側(cè)的操作數(shù)為null或者undefined時(shí),返回其右側(cè)數(shù),否則返回左側(cè)數(shù),文中通過(guò)代碼介紹的非常詳細(xì),需要的朋友可以參考下

一、核心概念

  1. 作用
    當(dāng)左側(cè)表達(dá)式為 nullundefined 時(shí),返回右側(cè)的默認(rèn)值;否則返回左側(cè)的值。

  2. 與 || 的區(qū)別

    • || 會(huì)對(duì) 所有假值(如 0、''、false、NaN)觸發(fā)默認(rèn)值。
    • ?? 僅對(duì) nullundefined 觸發(fā)默認(rèn)值,保留其他假值的語(yǔ)義。
    console.log(0 || 5);    // 5(0 是假值)
    console.log(0 ?? 5);    // 0(0 不是 null/undefined)
    

二、語(yǔ)法規(guī)則

leftExpr ?? rightExpr
  • 短路特性:若 leftExpr 不是 null/undefined,直接返回左側(cè)值,不計(jì)算右側(cè)。
  • 優(yōu)先級(jí):低于 ||&&,但高于三元運(yùn)算符 ? :。建議用 () 明確優(yōu)先級(jí)。

三、使用場(chǎng)景

1. 變量默認(rèn)值

const userInput = null;
const name = userInput ?? "Anonymous"; // "Anonymous"

2. 函數(shù)參數(shù)默認(rèn)值

function greet(message) {
  const text = message ?? "Hello";
  console.log(text);
}
greet(null);    // "Hello"
greet(undefined); // "Hello"
greet("");      // ""(保留空字符串)

3. 對(duì)象屬性安全訪問(wèn)

const config = {
  apiUrl: null,
  timeout: 0
};

const url = config.apiUrl ?? "https://default.api";
const timeout = config.timeout ?? 5000; // 0 被保留

4. 結(jié)合可選鏈?.使用

const user = {
  profile: null
};
const username = user?.profile?.name ?? "Guest"; // "Guest"

四、進(jìn)階用法

1. 多級(jí)空值合并

const a = null;
const b = undefined;
const c = "Fallback";
const result = a ?? b ?? c; // "Fallback"

2. 與解構(gòu)賦值結(jié)合

const settings = { theme: null };
const { theme = "light", fontSize = 16 } = settings;
// theme 使用 ?? 邏輯,fontSize 使用 = 默認(rèn)值

3. 動(dòng)態(tài)默認(rèn)值

let defaultPort;
const port = process.env.PORT ?? (defaultPort = 3000);

五、注意事項(xiàng)

  1. 不可直接用于未聲明的變量

    // 錯(cuò)誤示例(需確保變量已聲明)
    const value = undeclaredVar ?? 10; // ReferenceError
    
  2. 與 || 混用時(shí)的優(yōu)先級(jí)

    const a = null || undefined ?? "default"; // SyntaxError
    const b = (null || undefined) ?? "default"; // "default"
    
  3. 瀏覽器兼容性

    • 支持 ES2020+ 的環(huán)境(Chrome 80+, Firefox 72+, Node.js 14+)。
    • 舊環(huán)境需通過(guò) Babel 插件 @babel/plugin-proposal-nullish-coalescing-operator 轉(zhuǎn)譯。

六、性能優(yōu)化

  • 避免重復(fù)計(jì)算:若右側(cè)是復(fù)雜表達(dá)式,用函數(shù)封裝避免副作用。
    const value = input ?? computeDefault(); // computeDefault() 僅在需要時(shí)執(zhí)行
    

七、替代方案(舊代碼兼容)

// 使用三元運(yùn)算符模擬 ??
const value = (left !== null && left !== undefined) ? left : right;

總結(jié)

運(yùn)算符觸發(fā)默認(rèn)值的條件適用場(chǎng)景
??nullundefined保留其他假值(如 0、''
``

掌握 ?? 能顯著提升代碼可讀性,尤其在處理 API 響應(yīng)、配置項(xiàng)等場(chǎng)景時(shí),能更精準(zhǔn)地控制默認(rèn)值邏輯。

到此這篇關(guān)于JavaScript空值合并運(yùn)算符??使用場(chǎng)景的文章就介紹到這了,更多相關(guān)js空值合并運(yùn)算符??內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Typescript 函數(shù)重載的實(shí)現(xiàn)

    Typescript 函數(shù)重載的實(shí)現(xiàn)

    本文主要介紹了Typescript 函數(shù)重載的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2023-04-04
  • JavaScript 反射和屬性賦值實(shí)例解析

    JavaScript 反射和屬性賦值實(shí)例解析

    這篇文章主要介紹了JavaScript 反射和屬性賦值實(shí)例解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-10-10
  • JS實(shí)現(xiàn)將手機(jī)號(hào)中間的幾位數(shù)字變成****功能

    JS實(shí)現(xiàn)將手機(jī)號(hào)中間的幾位數(shù)字變成****功能

    這篇文章主要介紹了用js如何實(shí)現(xiàn)將手機(jī)號(hào)中間的幾位數(shù)字變成****?_,今天,我們要實(shí)現(xiàn)一個(gè)很常見(jiàn)并且簡(jiǎn)單的功能如何將手機(jī)號(hào)中間的幾位數(shù)變成****,需要的朋友可以參考下
    2023-09-09
  • Webpack打包詳細(xì)流程及代碼

    Webpack打包詳細(xì)流程及代碼

    這篇文章主要給大家介紹了關(guān)于Webpack打包詳細(xì)流程及代碼的相關(guān)資料,Webpack是一款非常流行的打包工具,它的主要作用是將項(xiàng)目中的各個(gè)模塊打包成靜態(tài)資源,以便于在瀏覽器中加載和運(yùn)行,需要的朋友可以參考下
    2024-01-01
  • echarts柱狀圖的點(diǎn)擊事件代碼示例

    echarts柱狀圖的點(diǎn)擊事件代碼示例

    這篇文章主要給大家介紹了關(guān)于echarts柱狀圖點(diǎn)擊事件的相關(guān)資料,在實(shí)際的項(xiàng)目開(kāi)發(fā)中我們通常會(huì)用到Echarts來(lái)對(duì)數(shù)據(jù)進(jìn)行展示,有時(shí)候需要用到Echarts的點(diǎn)擊事件,增加系統(tǒng)的交互,需要的朋友可以參考下
    2023-09-09
  • 原生JS實(shí)現(xiàn)匯率轉(zhuǎn)換功能代碼實(shí)例

    原生JS實(shí)現(xiàn)匯率轉(zhuǎn)換功能代碼實(shí)例

    這篇文章主要介紹了原生JS實(shí)現(xiàn)匯率轉(zhuǎn)換功能代碼實(shí)例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-05-05
  • Cordova(ionic)項(xiàng)目實(shí)現(xiàn)雙擊返回鍵退出應(yīng)用

    Cordova(ionic)項(xiàng)目實(shí)現(xiàn)雙擊返回鍵退出應(yīng)用

    這篇文章主要為大家詳細(xì)介紹了Cordova項(xiàng)目實(shí)現(xiàn)雙擊返回鍵退出應(yīng)用,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-09-09
  • Promise面試題詳解之控制并發(fā)

    Promise面試題詳解之控制并發(fā)

    promise面試中經(jīng)常會(huì)遇到的一個(gè)問(wèn)題就是關(guān)于控制并發(fā)的,所以下面這篇文章主要給大家介紹了關(guān)于Promise面試題之控制并發(fā)的相關(guān)資料,需要的朋友可以參考下
    2021-05-05
  • 簡(jiǎn)單理解js的冒泡排序

    簡(jiǎn)單理解js的冒泡排序

    本篇文章主要介紹了JavaScript的冒泡排序,對(duì)其進(jìn)行示例解析,具有很好的參考價(jià)值,需要的朋友一起來(lái)看下吧
    2016-12-12
  • js判斷是否是手機(jī)頁(yè)面

    js判斷是否是手機(jī)頁(yè)面

    本文主要介紹了js判斷是否是手機(jī)頁(yè)面的方法。具有很好的參考價(jià)值,下面跟著小編一起來(lái)看下吧
    2017-03-03

最新評(píng)論

博白县| 天津市| 晋州市| 大竹县| 滦平县| 张家港市| 安吉县| 泸州市| 永仁县| 应用必备| 滨海县| 龙海市| 金堂县| 临高县| 茂名市| 定结县| 海晏县| 女性| 娱乐| 泾源县| 连山| 哈密市| 都兰县| 台南市| 奎屯市| 黑水县| 乳山市| 青海省| 靖远县| 夏河县| 许昌市| 十堰市| 巢湖市| 乌拉特前旗| 屏东市| 江孜县| 仪征市| 九寨沟县| 日照市| 太保市| 邵武市|