2025澳门开彩结果历史记录-2025澳门开彩结果-2025澳门开彩查询记录-2025澳门聚宝盆-2025澳门九点半一肖一码-2025澳门精准资料免费全览

LOGO OA教程 ERP教程 模切知識(shí)交流 PMS教程 CRM教程 開(kāi)發(fā)文檔 其他文檔  
 
網(wǎng)站管理員

JavaScript 中處理 `null` 和 `undefined` 的演進(jìn)

admin
2025年1月26日 17:53 本文熱度 1765
在 JavaScript 引入可選鏈(optional chaining)和空值合并運(yùn)算符(nullish coalescing operator)之前,開(kāi)發(fā)者需要使用多種方法來(lái)安全地訪問(wèn)對(duì)象的嵌套屬性以及處理可能為 null 或 undefined 的值。這些方法雖然有效,但存在一些痛點(diǎn)。ES2020 引入的可選鏈和空值合并運(yùn)算符則極大地簡(jiǎn)化了這些問(wèn)題的處理。

1. 使用邏輯與運(yùn)算符 (&&)

在早期,判斷對(duì)象是否包含某個(gè)屬性并且該屬性不是 null 或 undefined,通常使用邏輯與運(yùn)算符:

var value = obj && obj.prop;

但這種方法僅適用于一層屬性檢查,對(duì)于深層次的嵌套屬性,代碼會(huì)變得冗長(zhǎng)且難以維護(hù)。

2. 使用邏輯或運(yùn)算符 (||)

為了提供一個(gè)默認(rèn)值,當(dāng)變量可能是 null 或 undefined 時(shí),可以使用邏輯或運(yùn)算符:

var value = obj && obj.prop || defaultValue;

這種方式不僅會(huì)在 null 和 undefined 時(shí)返回 defaultValue,還會(huì)在 false0'' (空字符串) 等其他假值情況下返回 defaultValue,這可能導(dǎo)致不期望的行為。

3. 嵌套檢查

對(duì)于更深層次的嵌套屬性,需要進(jìn)行多層檢查以確保每一層都不是 null 或 undefined

var value = obj && obj.level1 && obj.level1.level2 && obj.level1.level2.level3;

盡管可以這樣使用,但代碼會(huì)變得冗長(zhǎng)、難以閱讀,并且容易出錯(cuò)。每次添加或修改屬性層級(jí)時(shí)都需要調(diào)整代碼。

當(dāng)對(duì)象嵌套層級(jí)較深或者屬性可能不存在時(shí),我們需要進(jìn)行一系列的條件判斷來(lái)避免程序報(bào)錯(cuò)。為了簡(jiǎn)化這些復(fù)雜的邏輯,JavaScript 引入了兩個(gè)非常實(shí)用的操作符:可選鏈操作符(?.) 和 空值合并操作符(??)。今天介紹下這兩個(gè)操作符的使用方法以及它們背后的原理。

什么是可選鏈操作符(?.)

基本概念

可選鏈操作符(?.)用于簡(jiǎn)化訪問(wèn)嵌套對(duì)象的屬性或調(diào)用函數(shù)時(shí)的檢查過(guò)程。它允許我們?cè)谠L問(wèn)可能為 null 或 undefined 的對(duì)象屬性時(shí)避免拋出錯(cuò)誤。

使用場(chǎng)景

假設(shè)我們有一個(gè)用戶對(duì)象 user,其中包含地址信息 address,而地址信息中又包含城市信息 city

const user = {
    address: {
        city: "Beijing"
    }
};

如果我們直接訪問(wèn) user.address.city,這是安全的。但如果 user.address 不存在,則會(huì)拋出錯(cuò)誤。這時(shí)我們可以使用可選鏈操作符來(lái)避免這種情況:

console.log(user.address?.city); // 輸出 "Beijing"
console.log(user.unknown?.city); // 輸出 undefined

工作原理

當(dāng)使用可選鏈操作符時(shí),如果左側(cè)的操作數(shù)為 null 或 undefined,則整個(gè)表達(dá)式的值立即變?yōu)?nbsp;undefined,而不會(huì)繼續(xù)嘗試訪問(wèn)右側(cè)的屬性或調(diào)用方法。

console.log(null?.prop); // 輸出 undefined
console.log(undefined?.prop); // 輸出 undefined

空值合并操作符(??)

基本概念

空值合并操作符(??)用于提供一個(gè)默認(rèn)值給一個(gè)可能為 null 或 undefined 的變量。它只會(huì)在操作數(shù)為 null 或 undefined 時(shí)返回右側(cè)的值,否則返回左側(cè)的操作數(shù)。

在以往,

var value = obj && obj.prop || defaultValue;

但是要注意,這種方式不僅會(huì)在 null 和 undefined 時(shí)返回 defaultValue,也會(huì)在 false0'' (空字符串) 等其他假值情況下返回 defaultValue,這可能不是你想要的行為。

使用場(chǎng)景

當(dāng)我們希望為某個(gè)變量設(shè)置一個(gè)默認(rèn)值時(shí),可以使用空值合并操作符。例如,假設(shè)我們有一個(gè)可能為空的字符串變量 name,我們希望在它為空時(shí)使用一個(gè)默認(rèn)名字:

let name = null;
const defaultName = "Guest";
console.log(name ?? defaultName); // 輸出 "Guest"

工作原理

空值合并操作符僅在左側(cè)的操作數(shù)為 null 或 undefined 時(shí)返回右側(cè)的操作數(shù),否則返回左側(cè)的操作數(shù)。這使得我們可以優(yōu)雅地處理缺失數(shù)據(jù)的情況。

console.log(null ?? "default"); // 輸出 "default"
console.log(undefined ?? "default"); // 輸出 "default"
console.log("Hello" ?? "default"); // 輸出 "Hello"

結(jié)合使用

在實(shí)際開(kāi)發(fā)中,我們經(jīng)常需要結(jié)合使用這兩種操作符來(lái)處理復(fù)雜的數(shù)據(jù)結(jié)構(gòu)。例如,我們可能需要從一個(gè)深度嵌套的對(duì)象中獲取一個(gè)值,并為其提供一個(gè)默認(rèn)值:

const user = {
    address: {
        city: null
    }
};

const cityName = user.address?.city ?? "Unknown City";
console.log(cityName); // 輸出 "Unknown City"

在這個(gè)例子中,首先使用可選鏈操作符檢查 user.address.city 是否存在,如果不存在則返回 undefined。然后,空值合并操作符確保最終結(jié)果是 "Unknown City" 而不是 undefined

通過(guò)使用可選鏈操作符和空值合并操作符,我們可以大大簡(jiǎn)化對(duì)可能為 null 或 undefined 的數(shù)據(jù)的處理邏輯,使代碼更加簡(jiǎn)潔和易于維護(hù)。這兩種操作符在處理復(fù)雜對(duì)象和默認(rèn)值時(shí)提供了強(qiáng)大的支持,是現(xiàn)代JavaScript開(kāi)發(fā)中的重要工具。


該文章在 2025/1/26 17:53:23 編輯過(guò)
關(guān)鍵字查詢
相關(guān)文章
正在查詢...
點(diǎn)晴ERP是一款針對(duì)中小制造業(yè)的專業(yè)生產(chǎn)管理軟件系統(tǒng),系統(tǒng)成熟度和易用性得到了國(guó)內(nèi)大量中小企業(yè)的青睞。
點(diǎn)晴PMS碼頭管理系統(tǒng)主要針對(duì)港口碼頭集裝箱與散貨日常運(yùn)作、調(diào)度、堆場(chǎng)、車隊(duì)、財(cái)務(wù)費(fèi)用、相關(guān)報(bào)表等業(yè)務(wù)管理,結(jié)合碼頭的業(yè)務(wù)特點(diǎn),圍繞調(diào)度、堆場(chǎng)作業(yè)而開(kāi)發(fā)的。集技術(shù)的先進(jìn)性、管理的有效性于一體,是物流碼頭及其他港口類企業(yè)的高效ERP管理信息系統(tǒng)。
點(diǎn)晴WMS倉(cāng)儲(chǔ)管理系統(tǒng)提供了貨物產(chǎn)品管理,銷售管理,采購(gòu)管理,倉(cāng)儲(chǔ)管理,倉(cāng)庫(kù)管理,保質(zhì)期管理,貨位管理,庫(kù)位管理,生產(chǎn)管理,WMS管理系統(tǒng),標(biāo)簽打印,條形碼,二維碼管理,批號(hào)管理軟件。
點(diǎn)晴免費(fèi)OA是一款軟件和通用服務(wù)都免費(fèi),不限功能、不限時(shí)間、不限用戶的免費(fèi)OA協(xié)同辦公管理系統(tǒng)。
Copyright 2010-2025 ClickSun All Rights Reserved

主站蜘蛛池模板: 澳门三肖三码期期准精选 | 香港平特一肖内部资料网址 | 2025香港正版资料免费看 | 四肖八码期期准免费公开最新下 | 香港数码挂牌今期更新时间 | 2025年澳门今天特马开什么号码 | 49图库港澳台开奖结果今天安卓 | 澳门天天免费精准大全1998年03月28日的有限责任公司 | 2025全年新澳门新正版免费资料大全 | 2025澳彩今晚开什么号码 | 2025澳门特马今晚三肖八码必中中奖 | net)澳门一码一肖一特一中(官方)app下载安装ios/安卓通用版/手机版拥有亚洲娱乐游戏合法牌照 | 澳门49图图库app下载 | 澳门管家婆-肖一码 | 香港今晚出什么号码 | 澳门六开彩天天开奖结果生肖卡澳列 | 新奥彩2025年免费资料查询 | 神算子高手论坛正版免费资料 | 澳门六开彩开奖结果开奖记录 | 49图库全新版本最新版下载v1.7 | 2025天天彩全年免费资料 | 今天特马 | 2025年澳门正版资料免费大全 | 2025澳门传真八百图库 | 新澳门免费资料大全精准版下 | 管家最准一码一肖100 | 必中一肖四不像图片 | 澳门开奖结果+开奖直播 | 管家婆一肖一码最准资料公开021期23 | 2025年澳门特马开什么 | 澳门49彩图库2025年 | 澳门综合正版资料蓝月亮 | 2025年澳门资料免费大全49码 | 2025澳门六开记录查询97期 | 最准一码一肖精准 | 黄大仙三肖三码必中一期跑狗图[王青衫] | 正版查询首选平台 | 二四六天天好彩选好料 | 期期必中三肖 | 管家婆最新精准预测与分析下载 | 不用下的香港6合宝典最新版本资料大全 |