目錄
4. null 的替代方案
5. null vs undefined
6. 总结
首頁 web前端 js教程 全面解析JavaScript中null

全面解析JavaScript中null

Sep 13, 2022 pm 05:30 PM
javascript

這篇文章為大家帶來了關於javascript的相關知識,null是一種原始類型,表示有意不包含任何物件值,下面就來看一下JavaScript 中的null 的一切:它的意義,如何檢測它,null 和undefined 之間的區別,以及為什麼大量使用null 會造成程式碼維護困難等,希望對大家有幫助。

全面解析JavaScript中null

【相關推薦:javascript影片教學web前端

##JavaScript 有兩種型別:原始型別(strings, booleans, numbers, symbols)和物件

物件是一個複雜的資料結構。最簡單的

JavaScript 物件是普通物件 —— 鍵和相關值的集合

let myObject = {
  name: 'Eric Cartman'
};
登入後複製

但是很多情況下不能建立一個物件。在這種情況下,

JavaScript 提供了一個特殊的值null —— 表示缺少物件

let myObject = null;
登入後複製

在這篇文章中,你將學習關於

JavaScript 中的null 的一切: 它的意義,如何偵測它,nullundefined 之間的區別,以及為什麼大量使用null 會造成程式碼維護困難等

1.null 的概念

JavaScript 規格中這麼描述null

#null 是一種原始類型,表示有意不包含任何物件值

如果您看到

null(指派給變數或由函數傳回),那麼在那個位置原本應該是一個對象,但由於某種原因,一個對象沒有創建

比如,函數

greetObject() 創建對象,但也可以在無法創建對象時返回null:

function greetObject(who) {
  if (!who) {
    return null;
  }
  return { message: `Hello, ${who}!` };
}

greetObject('Eric'); // => { message: 'Hello, Eric!' }
greetObject();       // => null
登入後複製

當上面的函數中傳入一個字串參數時,如預期的,函數會傳回一個物件

{ message: 'Hello, Eric!' }

但是,當函數中不傳任何參數時,函數會傳回

null。傳回null 是合理的,因為who 參數沒有值,導致greeting 物件無法建立

1.1 null 的一個比較貼切的比喻

考慮關於

null 的一個比較貼切的比喻,你可以把變數想像成一個盒子。就像變數可以容納物件一樣,盒子也可以容納像茶壺等的物品

但一旦你收到一個盒子,打開它,什麼也沒有!有人弄錯了,給了你一個空盒子。該盒子不包含任何內容,或者換句話說,它包含一個

null

2. 如何去檢測null

檢查

null 好方法是使用嚴格相等運算子

const missingObject = null;
const existingObject = { message: 'Hello!' };

missingObject  === null; // => true
existingObject === null; // => false
登入後複製

missingObject === null 的結果為true,因為missingObject 變數包含一個 null 值。如果變數包含非空值,例如對象,則表達式existingObject === null 的結果為false

2.1 null 是一個假值

nullfalse、0、"、undefinedNaN 都是假值。如果在條件語句中遇到它們,那麼JavaScript 將會強制它們為false

Boolean(null); // => false

if (null) {
  console.log('null is truthy');
} else {
  console.log('null is falsy'); // logs 'null is falsy'
}
登入後複製

2.2 typeof null

typeof value 類型運算子可以確定值的型別。例如,型別為15 的是numbertypeof { prop: 'Value' } 等於object

有趣的是,

null 值類型的結果是什麼

typeof null; // => 'object'

一個缺少的物件類型怎麼被判斷為

object? 原來typoef null 作為object 是早期JavaScript 實作中的錯誤

#不要使用

typeof 運算子偵測null 值。如前所述,使用嚴格的相等運算子myVar === null

如果你想使用

typeof 去檢查一個變數是否是一個對象,你必須排除掉null 的情況

function isObject(object) {
  return typeof object === 'object' && object !== null;
}

isObject({ prop: 'Value' }); // => true
isObject(15);                // => false
isObject(null);              // => false
登入後複製

3. null 的陷阱

#null 通常會在你希望使用物件的情況下意外出現。然後,如果嘗試從null 中提取屬性,JavaScript 會拋出一個錯誤

讓我們再次使用

greetObject() 函數並嘗試從返回的物件中存取message 屬性

let who = '';

greetObject(who).message; 
// throws "TypeError: greetObject() is null"
登入後複製

因為

who 變數是一個空字串,所以函數傳回null。當從null 存取message 屬性時,會拋出類型錯誤錯誤

你可以透過使用可選鏈運算子來處理

null

let who = '';

greetObject(who)?.message ?? 'Hello, Stranger!';  
// => 'Hello, Stranger!'
登入後複製

或使用下一節中所述的兩種選擇。

4. null 的替代方案

当你不能构造一个对象时,很容易返回 null。但这种做法也有缺点

一旦 null 出现在执行堆栈中,你总是必须检查它

我们尽量避免返回 null

  • 返回默认对象而不是 null
  • 抛出错误而不是返回 null

让我们回忆一下 greetObject() 函数返回 greeting 对象

当缺少参数时,可以返回一个默认对象,而不是返回 null

function greetObject(who) {
  if (!who) {
    who = 'Stranger';
  }
  return { message: `Hello, ${who}!` };
}

greetObject('Eric'); // => { message: 'Hello, Eric!' }
greetObject();       // => { message: 'Hello, Stranger!' }
登入後複製

或者抛出一个错误

function greetObject(who) {
  if (!who) {
    throw new Error('"who" argument is missing');
  }
  return { message: `Hello, ${who}!` };
}

greetObject('Eric'); // => { message: 'Hello, Eric!' }
greetObject();       // => throws an error
登入後複製

这些实践可以让你完全避免处理 null

5. null vs undefined

undefined 就是未初始化的变量或对象属性的值

例如,如果在声明变量时没有赋初值,那么访问该变量的结果为 undefined

let myVariable;

myVariable; // => undefined
登入後複製

nullundefined 之间的主要区别是,null 表示丢失了的对象,而 undefined 表示未初始化的状态

严格相等运算符 === 区分 nullundefined

null === undefined; // => false
登入後複製

而松散相等运算符 == 则认为 nullundefined 相等

null == undefined; // => true
登入後複製

我使用松散相等运算符检查变量是否为 nullundefined

function isEmpty(value) {
  return value == null;
}

isEmpty(42);                // => false
isEmpty({ prop: 'Value' }); // => false
isEmpty(null);              // => true
isEmpty(undefined);         // => true
登入後複製

6. 总结

nullJavaScript 中的一个特殊值,表示丢失的对象

严格相等运算符判断变量是否为空: variable === null

typoef 操作符用于确定变量的类型(number, string, boolean)。但是,typeofnull 情况下会引起误解: typeof null 结果为 object

nullundefined 在某种程度上是等价的,但null 表示一个丢失的对象,而 undefined 表示未初始化状态

尽可能避免返回 null 或将变量设置为 null。因为这种做法会导致 null 值的扩展和需要对 null 的验证。相反,尝试使用具有默认属性的对象,或者甚至抛出错误会是更好的实践

你会使用什么方法来检查 null?

【相关推荐:javascript视频教程web前端

以上是全面解析JavaScript中null的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

如何使用WebSocket和JavaScript實現線上語音辨識系統 如何使用WebSocket和JavaScript實現線上語音辨識系統 Dec 17, 2023 pm 02:54 PM

如何使用WebSocket和JavaScript實現線上語音辨識系統引言:隨著科技的不斷發展,語音辨識技術已成為了人工智慧領域的重要組成部分。而基於WebSocket和JavaScript實現的線上語音辨識系統,具備了低延遲、即時性和跨平台的特點,成為了廣泛應用的解決方案。本文將介紹如何使用WebSocket和JavaScript來實現線上語音辨識系

WebSocket與JavaScript:實現即時監控系統的關鍵技術 WebSocket與JavaScript:實現即時監控系統的關鍵技術 Dec 17, 2023 pm 05:30 PM

WebSocket與JavaScript:實現即時監控系統的關鍵技術引言:隨著互聯網技術的快速發展,即時監控系統在各個領域中得到了廣泛的應用。而實現即時監控的關鍵技術之一就是WebSocket與JavaScript的結合使用。本文將介紹WebSocket與JavaScript在即時監控系統中的應用,並給出程式碼範例,詳細解釋其實作原理。一、WebSocket技

如何利用JavaScript和WebSocket實現即時線上點餐系統 如何利用JavaScript和WebSocket實現即時線上點餐系統 Dec 17, 2023 pm 12:09 PM

如何利用JavaScript和WebSocket實現即時線上點餐系統介紹:隨著網路的普及和技術的進步,越來越多的餐廳開始提供線上點餐服務。為了實現即時線上點餐系統,我們可以利用JavaScript和WebSocket技術。 WebSocket是一種基於TCP協定的全雙工通訊協議,可實現客戶端與伺服器的即時雙向通訊。在即時線上點餐系統中,當使用者選擇菜餚並下訂單

如何使用WebSocket和JavaScript實現線上預約系統 如何使用WebSocket和JavaScript實現線上預約系統 Dec 17, 2023 am 09:39 AM

如何使用WebSocket和JavaScript實現線上預約系統在當今數位化的時代,越來越多的業務和服務都需要提供線上預約功能。而實現一個高效、即時的線上預約系統是至關重要的。本文將介紹如何使用WebSocket和JavaScript來實作一個線上預約系統,並提供具體的程式碼範例。一、什麼是WebSocketWebSocket是一種在單一TCP連線上進行全雙工

JavaScript與WebSocket:打造高效率的即時天氣預報系統 JavaScript與WebSocket:打造高效率的即時天氣預報系統 Dec 17, 2023 pm 05:13 PM

JavaScript和WebSocket:打造高效的即時天氣預報系統引言:如今,天氣預報的準確性對於日常生活以及決策制定具有重要意義。隨著技術的發展,我們可以透過即時獲取天氣數據來提供更準確可靠的天氣預報。在本文中,我們將學習如何使用JavaScript和WebSocket技術,來建立一個高效的即時天氣預報系統。本文將透過具體的程式碼範例來展示實現的過程。 We

簡易JavaScript教學:取得HTTP狀態碼的方法 簡易JavaScript教學:取得HTTP狀態碼的方法 Jan 05, 2024 pm 06:08 PM

JavaScript教學:如何取得HTTP狀態碼,需要具體程式碼範例前言:在Web開發中,經常會涉及到與伺服器進行資料互動的場景。在與伺服器進行通訊時,我們經常需要取得傳回的HTTP狀態碼來判斷操作是否成功,並根據不同的狀態碼來進行對應的處理。本篇文章將教你如何使用JavaScript來取得HTTP狀態碼,並提供一些實用的程式碼範例。使用XMLHttpRequest

javascript如何使用insertBefore javascript如何使用insertBefore Nov 24, 2023 am 11:56 AM

用法:在JavaScript中,insertBefore()方法用於在DOM樹中插入一個新的節點。這個方法需要兩個參數:要插入的新節點和參考節點(即新節點將要插入的位置的節點)。

JavaScript與WebSocket:打造高效率的即時影像處理系統 JavaScript與WebSocket:打造高效率的即時影像處理系統 Dec 17, 2023 am 08:41 AM

JavaScript是一種廣泛應用於Web開發的程式語言,而WebSocket則是一種用於即時通訊的網路協定。結合二者的強大功能,我們可以打造一個高效率的即時影像處理系統。本文將介紹如何利用JavaScript和WebSocket來實作這個系統,並提供具體的程式碼範例。首先,我們需要明確指出即時影像處理系統的需求和目標。假設我們有一個攝影機設備,可以擷取即時的影像數

See all articles