在开发当中,什么时候用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有了更深层次的了解,最后祝你也祝我在今后日子里能够登高望远,心向彼岸。

相关推荐
轻口味1 分钟前
【每日学点鸿蒙知识】AVCodec、SmartPerf工具、web组件加载、监听键盘的显示隐藏、Asset Store Kit
前端·华为·harmonyos
alikami4 分钟前
【若依】用 post 请求传 json 格式的数据下载文件
前端·javascript·json
wakangda35 分钟前
React Native 集成原生Android功能
javascript·react native·react.js
吃杠碰小鸡38 分钟前
lodash常用函数
前端·javascript
emoji1111111 小时前
前端对页面数据进行缓存
开发语言·前端·javascript
泰伦闲鱼1 小时前
nestjs:GET REQUEST 缓存问题
服务器·前端·缓存·node.js·nestjs
m0_748250031 小时前
Web 第一次作业 初探html 使用VSCode工具开发
前端·html
一个处女座的程序猿O(∩_∩)O1 小时前
vue3 如何使用 mounted
前端·javascript·vue.js
m0_748235951 小时前
web复习(三)
前端
User_undefined1 小时前
uniapp Native.js原生arr插件服务发送广播到uniapp页面中
android·javascript·uni-app