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

淺析JavaScript中如何正確判斷null和undefined

 更新時間:2026年01月08日 11:47:01   作者:程序員大華  
這篇文章主要為大家詳細(xì)介紹了JavaScript中如何正確判斷null和undefined,文中的示例代碼講解詳細(xì),具有一定的借鑒價值,有需要的小伙伴可以了解下

相信寫前端開發(fā)的朋友對下面這種報錯應(yīng)該很熟悉:

Cannot read properties of undefined

有一次我加班處理問題,也是因為這一個bug。

后來才發(fā)現(xiàn),原來是一個接口返回的數(shù)據(jù)里,某個字段有時候是null導(dǎo)致的,而我沒有做判斷就直接使用了。

一、為什么需要判斷空值?

舉例如下:

// 場景1:用戶沒填姓名
const userName = undefined;
console.log(userName.length); // 報錯!Cannot read properties of undefined

// 場景2:接口返回空數(shù)據(jù)
const apiResponse = null;
console.log(apiResponse.data); // 報錯!Cannot read properties of null

所以,空值判斷是保證代碼健壯性的重要環(huán)節(jié)。

二、先搞懂:null 和 undefined 有啥區(qū)別?

雖然它們都表示空,但含義不同:

undefined:變量被聲明了,但還沒賦值。

let name;
console.log(name); // undefined

null:程序員主動賦值為空,表示我明確知道這里沒有值。

let user = null; // 表示“用戶不存在”

所以,當(dāng)我們說判斷變量是否為空,通常是指:它是不是 nullundefined。

三、判斷方法

以下介紹了比較常用的幾種判斷方案。

方法一:顯式比較(最保險)

if (variable === null || variable === undefined) {
  console.log('變量為空');
}

適用場景

  • 需要明確區(qū)分null和undefined時
  • 團(tuán)隊代碼規(guī)范要求嚴(yán)格相等判斷
  • 對代碼可讀性要求高的項目

案例

function getUserProfile(user) {
  if (user === null || user === undefined) {
    return '用戶不存在';
  }
  return `歡迎,${user.name}`;
}

方法二:非嚴(yán)格相等(最常用)

if (variable == null) {
  console.log('變量為空');
}

這里有個重要知識點== null 實際上等價于 === null || === undefined,這是JavaScript的語言特性。

為什么推薦這個寫法?

  • 代碼簡潔,少寫很多字符
  • 性能優(yōu)秀,現(xiàn)代JS引擎都做了優(yōu)化
  • 意圖明確,專業(yè)開發(fā)者一看就懂

方法三:邏輯非操作符

if (!variable) {
  console.log('變量為falsy值');
}

注意! 這個方法容易造成其它的誤傷:

// 這些值都會被判斷為"空"
!false      // true
!0         // true  
!""        // true
!NaN       // true

// 實際開發(fā)中的坑
const count = 0;
if (!count) {
  console.log('計數(shù)為0'); // 這里會執(zhí)行,但可能不是我們想要的
}

方法四:typeof 關(guān)鍵字(安全的寫法)

if (typeof variable === 'undefined' || variable === null) {
  console.log('變量是空的!');
}

安全在哪?

// 如果變量根本沒聲明,前兩種方法會報錯
if (notDeclaredVariable == null) { // 報錯!ReferenceError
}

if (typeof notDeclaredVariable === 'undefined') { // 正常運行!
  console.log('變量未定義');
}

這種寫法主要用于檢查一個變量是否被聲明過,但對于普通函數(shù)參數(shù)或已聲明變量,沒必要這么復(fù)雜。

適用于不確定變量是否聲明的場景。

方法五:空值合并操作符(現(xiàn)代寫法)

這是ES2020的新特性,用起來特別順手:

// 傳統(tǒng)寫法
const name = username ? username : '匿名用戶';

// 現(xiàn)代寫法
const name = username ?? '匿名用戶';

優(yōu)勢:只對 nullundefined 生效,不會誤判0、false等其他值。

方法六:可選鏈操作符(對象屬性專用)

處理嵌套對象時,這個功能簡直是救命稻草:

// 以前的痛苦寫法
const street = user && user.address && user.address.street;

// 現(xiàn)在的優(yōu)雅寫法
const street = user?.address?.street;

結(jié)合空值合并,寫法更加安全:

const street = user?.address?.street ?? '地址未知';

四、實際開發(fā)中的建議

場景1:簡單的空值檢查

// 推薦
if (value == null) {
  // 處理空值
}

// 或者
const safeValue = value ?? defaultValue;

場景2:需要區(qū)分null和undefined

if (value === null) {
  console.log('明確設(shè)置為空');
}

if (value === undefined) {
  console.log('未定義');
}

場景3:處理對象屬性

// 安全訪問深層屬性
const phone = order?.customer?.contact?.phone ?? '未填寫';

場景4:函數(shù)參數(shù)默認(rèn)值

function createUser(name, age = 18) {
  // age參數(shù)只在undefined時使用默認(rèn)值
  return { name, age };
}

五、總結(jié)

雖然現(xiàn)代JavaScript引擎優(yōu)化得很好,但了解原理還是有幫助的:

  • == null 和顯式比較性能相當(dāng)
  • typeof 檢查稍慢,但能安全檢測未聲明變量
  • 可選鏈操作符在現(xiàn)代瀏覽器中性能優(yōu)秀
場景推薦寫法原因
一般空值檢查value == null簡潔高效
需要明確意圖value === undefined可讀性強
設(shè)置默認(rèn)值value ?? defaultValue安全準(zhǔn)確
對象屬性訪問obj?.prop避免報錯
函數(shù)參數(shù)參數(shù)默認(rèn)值語言特性

沒有絕對最好的方法,只有最適合當(dāng)前場景的選擇。根據(jù)你的具體需求和團(tuán)隊規(guī)范來決策吧!

到此這篇關(guān)于淺析JavaScript中如何正確判斷null和undefined的文章就介紹到這了,更多相關(guān)JavaScript判斷null和undefined內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • javascript實現(xiàn)圖像循環(huán)明暗變化的方法

    javascript實現(xiàn)圖像循環(huán)明暗變化的方法

    這篇文章主要介紹了javascript實現(xiàn)圖像循環(huán)明暗變化的方法,實例分析了javascript操作css樣式的技巧,具有一定參考借鑒價值,需要的朋友可以參考下
    2015-02-02
  • javascript實現(xiàn)textarea中tab鍵的縮排處理方法

    javascript實現(xiàn)textarea中tab鍵的縮排處理方法

    這篇文章主要介紹了javascript實現(xiàn)textarea中tab鍵的縮排處理方法,涉及javascript處理鼠標(biāo)事件及頁面元素的相關(guān)技巧,需要的朋友可以參考下
    2015-06-06
  • js以分隔符分隔數(shù)組中的元素并轉(zhuǎn)換為字符串的方法

    js以分隔符分隔數(shù)組中的元素并轉(zhuǎn)換為字符串的方法

    下面小編就為大家?guī)硪黄猨s以分隔符分隔數(shù)組中的元素并轉(zhuǎn)換為字符串的方法。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2016-11-11
  • JavaScript對象和字串之間的轉(zhuǎn)換實例探討

    JavaScript對象和字串之間的轉(zhuǎn)換實例探討

    從對象的格式可以看出,如果字串的格式定義成 json 格式的, 就可以直接轉(zhuǎn)換為obj了,感興趣的朋友可以參考下哈
    2013-04-04
  • 微信小程序中如何使用xlsx(xlsx.mini.min.js)實現(xiàn)Excel導(dǎo)入導(dǎo)出功能

    微信小程序中如何使用xlsx(xlsx.mini.min.js)實現(xiàn)Excel導(dǎo)入導(dǎo)出功能

    這篇文章主要介紹了微信小程序中如何使用xlsx(xlsx.mini.min.js)實現(xiàn)Excel導(dǎo)入導(dǎo)出功能的相關(guān)資料,包括準(zhǔn)備工作、導(dǎo)出Excel的基本流程、導(dǎo)入Excel的基本流程、常用API說明以及注意事項,需要的朋友可以參考下
    2026-01-01
  • javascript實現(xiàn)捕捉鍵盤上按下的鍵

    javascript實現(xiàn)捕捉鍵盤上按下的鍵

    JavaScript取得按下鍵盤的鍵是哪個,通過創(chuàng)建一個event.keyCode對象,可有效獲取鍵盤上的鍵,運行代碼后,點擊鍵盤上的任意鍵,網(wǎng)頁上顯示你按下的是哪個鍵。
    2015-05-05
  • JavaScript中定義類的方式詳解

    JavaScript中定義類的方式詳解

    這篇文章主要介紹了JavaScript中定義類的方式,結(jié)合實例形式分析了JavaScript實現(xiàn)面向?qū)ο箢惖亩x及使用相關(guān)技巧,并附帶了四種JavaScript類的定義方式,需要的朋友可以參考下
    2016-01-01
  • 淺析js封裝和作用域

    淺析js封裝和作用域

    在編寫web軟件時,遇到一些可以共用js的情況,于是就想著如何封裝js代碼。基本需求很簡單,其實就是根據(jù)不同的情況封裝js代碼
    2013-07-07
  • Javascript中的this綁定介紹

    Javascript中的this綁定介紹

    在Javascript里,函數(shù)被調(diào)用的時候,除了接受聲明是定義的形式參數(shù),每一個函數(shù)還接受兩個附加的參數(shù):this和arguments。
    2011-09-09
  • 淺談DOM的操作以及性能優(yōu)化問題-重繪重排

    淺談DOM的操作以及性能優(yōu)化問題-重繪重排

    下面小編就為大家?guī)硪黄獪\談DOM的操作以及性能優(yōu)化問題-重繪重排。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-01-01

最新評論

吉木萨尔县| 博爱县| 策勒县| 灵台县| 巴马| 泽州县| 清新县| 乌苏市| 安康市| 芜湖县| 安新县| 临夏县| 满城县| 苗栗县| 巴东县| 布尔津县| 砚山县| 岳阳县| 华宁县| 景洪市| 华蓥市| 天长市| 定南县| 城口县| 青冈县| 独山县| 宜川县| 那坡县| 辉南县| 和林格尔县| 临夏县| 鄂托克前旗| 罗源县| 色达县| 来安县| 资阳市| 卓尼县| 房产| 巨鹿县| 巧家县| 伊吾县|