亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

JavaScript雙問號操作符(??)的驚人用法總結大全

 更新時間:2025年06月30日 11:39:51   投稿:daisy  
雙問號操作符是ES2020引入的一個用于處理變量默認值的新特性,與傳統(tǒng)的邏輯或操作符||不同,這篇文章主要介紹了JavaScript雙問號操作符(??)詳解及如何解決使用||時因類型轉換帶來的問題,需要的朋友可以參考下

前言

JavaScript作為一門不斷發(fā)展的語言,總是在引入新特性來解決開發(fā)者的痛點。其中,ES2020引入的空值合并操作符(Nullish Coalescing Operator),即雙問號操作符(??),是一個簡單卻極其強大的工具,徹底改變了我們處理默認值和空值的方式。

1. 基本概念:什么是??操作符

雙問號操作符(??)是一個邏輯操作符,當左側操作數(shù)為null或undefined時,返回右側操作數(shù),否則返回左側操作數(shù)。這看似簡單,但與我們常用的邏輯或操作符(||)有著本質區(qū)別。

const value1 = null ?? 'default';        // 'default'
const value2 = undefined ?? 'default';    // 'default'
const value3 = false ?? 'default';        // false
const value4 = 0 ?? 'default';            // 0
const value5 = '' ?? 'default';           // ''

2. ??與||的關鍵區(qū)別

在了解??操作符的強大之前,我們需要理解它與||操作符的區(qū)別:

// 使用||
const count = userCount || 10;  // 當userCount為0時,count將為10

// 使用??
const count = userCount ?? 10;  // 當userCount為0時,count將為0

||操作符會將所有"假值"(如0、''、false、NaN等)都視為需要使用默認值的情況,而??操作符只在值為null或undefined時才使用默認值。

3. 實際應用

(1) 表單處理中的默認值

function processForm(data) {
  // 只有當值真正缺失時才使用默認值
  const username = data.username ?? 'guest';
  const items = data.items ?? [];
  const quantity = data.quantity ?? 1;  // 允許quantity為0
  
  // 處理表單邏輯...
}

(2) 配置對象的深層默認值

const config = {
  server: {
    port: 0,  // 有效值,但為"假值"
    host: ''  // 有效值,但為"假值"
  }
};

const userConfig = {};

// 正確處理深層配置
const port = userConfig?.server?.port ?? config.server.port;  // 0
const host = userConfig?.server?.host ?? config.server.host;  // ''

(3) API響應處理

(4) 鏈式默認值

??操作符可以鏈式使用,創(chuàng)建一個"默認值瀑布":

(5) 與可選鏈操作符(?.)完美配合

當與可選鏈操作符(?.)結合使用時,處理復雜嵌套對象變得異常優(yōu)雅:

const userName = user?.profile?.preferences?.displayName ?? 'Guest';

這行代碼可以安全地深入訪問一個可能不存在的嵌套屬性,并在任何一層為null或undefined時提供默認值。

(6) 條件性執(zhí)行函數(shù)

// 僅當handler存在時才執(zhí)行,否則使用默認處理函數(shù)
(customHandler ?? defaultHandler)(event);

(7) 數(shù)組元素的默認值處理

4. 高級技巧

(1) 結合解構賦值

const { name, age, title = 'Developer', company = 'Unknown' } = employee ?? {};

這個模式不僅能處理employee為null/undefined的情況,還為解構出的個別屬性提供默認值。

(2) 在類中使用

class UserPreferences {
  constructor(settings) {
    this.theme = settings?.theme ?? 'light';
    this.fontSize = settings?.fontSize ?? 16;
    this.notifications = settings?.notifications ?? true;
    
    // 即使settings.volume為0也會被保留
    this.volume = settings?.volume ?? 0.5;
  }
}

5. 性能考慮

??操作符不僅語法簡潔,在某些情況下還能帶來性能優(yōu)勢。由于它只檢查null和undefined,比||操作符的類型轉換操作更高效。

雙問號操作符(??)雖然看似簡單,卻解決了JavaScript中一個長期存在的痛點:如何正確處理"空值"與"假值"的區(qū)別。

總結

到此這篇關于JavaScript雙問號操作符(??)驚人用法的文章就介紹到這了,更多相關JS 雙問號操作符??用法內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

最新評論