在开发当中,什么时候用null什么时候用undefined你清楚吗?

前言

在之前我对于nullundefined了解就是,用typeof操作符,null会返回 'object'undefined会返回 'undefined'、两者都是 JS 中的基本数据类型、两者被转化为布尔值时,都是 false、使用 == 进行比较时为 true、使用 === 进行比较时为 false,并没有进行一个系统的总结,现在特意写一篇文章,希望大家看完这篇文章可以对二者有更深层次的理解。

接下来,让我们弄清楚二者之间的区别。

定义

1. null

null 是一种基本数据类型,用于表示空值或者不存在的对象,即"no object"。我们可以将其视为一种特殊的占位符,表示一个变量或者对象不持有任何值,所以它通常用于初始化一个变量,以表明这个变量目前不指向任何特定的对象。

换句话说,当我们说一个变量是 null,我们是在明确地指出它目前没有被赋予任何对象的引用,它是一个尚未与任何对象建立联系的初始状态。

2. undefined

undefined 也是一种特殊的基本数据类型,用来表示一个变量已经创建,但是尚未被赋予具体的值,即"no value"。表示一个变量最原始的状态,相当于一个标记,用来指出变量存在但尚未定义其内容。这就与undefined不同了,undefined 表示变量尚未被赋值,而null 表示变量已经被赋值为空。

什么时候出现null什么时候出现undefined 🔥🔥🔥

我们先来几个场景看看:

这里我们只是定义了一个变量a,没有给它赋值,根据undefined表示no value,我们自然而然就能明白它就是undefined,它表达了这个a,将来可能是任意的值,但它现在的状态就是没有值的。

再看这个场景,我们直接使用了一个对象中不存在的属性,它得到的结果也是 undefined,它表达这个属性目前是没有值的,将来 js 可以动态为对象添加属性,所以这属性也可能是任意的值。

接下来,来看看 null

null 表达的是 no object,无对象,所以null的设计天生就和对象相关联。在这场景中document.getElementById()应该得到一个dom对象,当不存在这个对象的时候,表达的就是无对象,所以是 null

null 天生就和对象相关联,这点在我们使用 typeof 操作符也能体现。

这个"误判"也是 JavaScript 作者承认的一个缺陷。在 JavaScript 的早期实现中,值以 32位 存储,前 3位 表示数据类型的标记,其余位则表示值。在对象的内部表示中,类型标记通常是以一系列零开始的。而 null 被用来表示空值,类似于 C 语言中的空指针,它的内部表示为全零(即 32 位都是 0),所以也正是 null 的类型标记与对象的类型标记相同,typeof 操作符将 null 错误地识别为一个对象。

总的来说,nullundefined 都表示空,主要区别在于 undefined 表示尚未初始化的变量的值,而 null 表示该变量有意缺少对象指向。清楚了这个我们就能知道在开发中什么时候使用 null,什么时候使用 undefined

总结 🌸🌸🌸

null

  1. 初始化空引用 :当你创建一个变量,并且你清楚地知道当前不应该指向任何对象或值时,你可以将这个变量设置为 null。比如,你声明了一个用于稍后存放数据库连接的对象,但在建立连接之前,你可以先将它设置为 null
  2. 清空对象引用 :如果你有一个对象引用,但你希望删除这个引用,可以将它设置为 null
  3. 函数返回值 :在函数中,如果你需要表示"没有返回任何有意义的值",可以使用 null 作为返回值。
  4. 占位符 :在某些情况下,null 可以作为占位符,直到你有了实际的值可以放入。

undefined

  1. 未初始化的变量 :当你声明一个变量但还没有给它赋值时,这个变量的值默认是 undefined
  2. 函数没有返回值 :如果你的函数没有使用 return 语句返回任何值,或者 return 语句没有指定任何值,函数的返回值就是 undefined
  3. 属性不存在 :当你尝试访问一个对象的属性,而这个属性在对象中不存在时,你得到的是 undefined
  4. 参数未提供 :如果一个函数的参数没有被调用时提供,那么这个参数的值是 undefined

看到这里,恭喜你对于nullundefined有了更深层次的了解,最后祝你也祝我在今后日子里能够登高望远,心向彼岸。

相关推荐
Kagol1 天前
🎉OpenTiny NEXT-SDK 重磅发布:四步把你的前端应用变成智能应用!
前端·开源·agent
GIS之路1 天前
ArcGIS Pro 中的 notebook 初识
前端
JavaGuide1 天前
7 道 RAG 基础概念知识点/面试题总结
前端·后端
ssshooter1 天前
看完就懂 useSyncExternalStore
前端·javascript·react.js
格砸1 天前
从入门到辞职|从ChatGPT到OpenClaw,跟上智能时代的进化
前端·人工智能·后端
Live000001 天前
在鸿蒙中使用 Repeat 渲染嵌套列表,修改内层列表的一个元素,页面不会更新
前端·javascript·react native
柳杉1 天前
使用Ai从零开发智慧水利态势感知大屏(开源)
前端·javascript·数据可视化
兆子龙1 天前
从高阶函数到 Hooks:React 如何减轻开发者的心智负担(含 Demo + ahooks 推荐)
前端
狗胜1 天前
测试文章 - API抓取
前端