JavaScript中null与undefined的区别总结

 更新时间:2025年09月15日 10:28:46   作者:昉钰  
在JavaScript中,null和undefined是两个特殊的值,这篇文章主要介绍了JavaScript中null与undefined区别的相关资料,文中通过代码介绍的非常详细,需要的朋友可以参考下

前言

写Java的时候我们就是用null来标识对象没有值,一个声明但是没有赋值的对象默认就是null,这个点对于Java老手来说实在是熟悉不过了;但是Java老手你可指定js中“空”对象是用啥表示吗?

我问了这个问题,就表示在js中表示空对对象与Java是不太一样的,除了null还有一个undefined可以表示空对象,今天我们就来看看在js中这两兄弟有啥不一样的。

1、typeof操作符

首先来看看typeof操作符,这个东西会返回所检测变量的类型,请看下面表格:

表达式返回值说明
typeof undefined"undefined"未定义的值
typeof true"boolean"布尔值
typeof 42"number"所有数字类型
typeof "text""string"字符串
typeof {a:1}"object"对象、数组、null
typeof function(){}"function"函数
typeof Symbol()"symbol"ES6新增符号类型
typeof BigInt(10)"bigint"ES2020新增大整数类型

来些实例:

console.log(typeof 'Hello')                //string
console.log(typeof 112.33)                 //number
console.log(typeof {a: '1'})               //object
console.log(typeof [1, 2, 3,4 ])           //object
console.log(Array.isArray([1, 2, 3, 4]))   //true
console.log([1, 2, 3, 4] instanceof Array) //true

var x = new Number
console.log(typeof x)                      //object
console.log(x instanceof Number)           //true
console.log(x instanceof String)           //false

如下是运行结果:

再来看看一些用法:

  • 检测未定义变量:
if (typeof variable === "undefined") {...}
  • 检测函数是否存在:
if (typeof myFunction === "function") {...}
  • 注意数组和null的特殊情况:
// 正确检测数组
if (Array.isArray(myVar)) {...}

// 正确检测null
if (myVar === null) {...}

有一些特殊情况需要注意:

  • typeof null 会返回 "object",这是一个历史遗留的问题,实际上 null 是一个空或者不存在的值,不是一个对象。

  • typeof NaN 会返回 "number",这是因为 NaN 是一个特殊的数值类型,表示 Not a Number(不是一个数字)。

  • typeof [] 会返回 "object",这是因为数组是一种特殊的对象类型,它有一个 length 属性和一些方法来操作元素。

2、null

在 JavaScript 中 null 表示 "什么都没有"。

null是一个只有一个值的特殊类型,表示一个空对象引用,typeof一个null的变量会返回object。

你可以设置为 null 来清空对象:

var person = null;           // 值为 null(空), 但类型为对象

你也可以设置为 undefined 来清空对象:

var person = undefined;     // 值为 undefined, 类型为 undefined

3、undefined

在 JavaScript 中, undefined 是一个没有设置值的变量。typeof 一个没有值的变量会返回 undefined。

var person;                  // 值为 undefined(空), 类型是undefined

任何变量都可以通过设置值为 undefined 来清空。 类型为 undefined.

person = undefined;          // 值为 undefined, 类型是undefined

4、undefined 和 null 的区别

null 和 undefined 的值相等,但类型不等:

typeof undefined             // undefined
typeof null                  // object
null === undefined           // false
null == undefined            // true

5、总结一下

在 JavaScript 中, null 用于对象,undefined 用于变量、属性和方法。对象只有被定义才有可能为 null,否则为 undefined。

如果我们想测试对象是否存在,在对象还没定义时将会抛出一个错误。错误的使用方式:

if (myObj !== null && typeof myObj !== "undefined") 

正确的方式是我们需要先使用 typeof 来检测对象是否已定义:

if (typeof myObj !== "undefined" && myObj !== null) 

1、定义

  •  undefined:是所有没有赋值变量的默认值,自动赋值。
  •  null:主动释放一个变量引用的对象,表示一个变量不再指向任何对象地址。

2、何时使用null?

当使用完一个比较大的对象时,需要对其进行释放内存时,设置为 null。

3、null 与 undefined 的异同点是什么呢?

共同点:都是原始类型,保存在栈中变量本地。

不同点:

(1)undefined——表示变量声明过但并未赋过值。

它是所有未赋值变量默认值,例如:

var a;    // a 自动被赋值为 undefined

(2)null——表示一个变量将来可能指向一个对象。

一般用于主动释放指向对象的引用,例如:

var emps = ['ss','nn'];
emps = null;     // 释放指向数组的引用

4、延伸——垃圾回收站

它是专门释放对象内存的一个程序。

  •  在底层,后台伴随当前程序同时运行;引擎会定时自动调用垃圾回收期;
  •  总有一个对象不再被任何变量引用时,才释放。

附:建议在何时使用null或undefined

在JavaScript中,Null和Undefined都有其特殊用法和含义,取决于具体使用场景,我们可以根据以下建议来决定何时使用Null或Undefined:

1. 使用Undefined

当需要表示一个变量或属性尚未被赋值或者定义时,使用Undefined是非常合适的。例如,在声明变量但不初始化的情况下,变量的默认值为Undefined。

var a;
console.log(a); // undefined

另外,在访问对象的不存在属性时,也会得到Undefined值:

var person = {}
console.log(person.age) // undefined

2. 使用Null

当需要表示一个变量尚未被初始化或者引用的对象不存在时,使用Null是非常合适的。例如,在释放某个对象的引用时,可以使用Null:

var obj = {}
obj = null

另外,有些API方法可能会返回Null,例如当查询某个元素不存在时,可以得到Null值:

var el = document.getElementById('not-exist')
console.log(el) // null

总的来说,当我们需要判断变量或属性是否已被初始化或者引用的对象是否存在时,可以使用Undefined或Null来表示。需要注意的是,在使用Undefined或Null时,要考虑其在类型、属性值、比较运算符等方面的特殊性,避免由此引起的问题。

总结 

到此这篇关于JavaScript中null与undefined区别的文章就介绍到这了,更多相关js中null与undefined区别内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • js与jQuery 获取父窗、子窗的iframe

    js与jQuery 获取父窗、子窗的iframe

    本篇文章介绍了js与jQuery 获取父窗、子窗的iframe。需要的朋友可以过来参考下,希望对大家有所帮助
    2013-12-12
  • JS转换金额大写方法详细例子

    JS转换金额大写方法详细例子

    在处理财务账款类需求时需要将转账金额写成大写的,下面这篇文章主要给大家介绍了关于JS转换金额大写方法的相关资料,文中给出了详细的代码示例,需要的朋友可以参考下
    2023-10-10
  • JS实现文字向下滚动完整实例

    JS实现文字向下滚动完整实例

    这篇文章主要介绍了JS实现文字向下滚动的方法,以一个完整实例形式详细分析了html页面布局、css样式及对应的js滚动功能实现技巧,需要的朋友可以参考下
    2015-02-02
  • Javascript中this绑定的3种方法与比较

    Javascript中this绑定的3种方法与比较

    大家都知道JS是一门动态语言,与传统的c和c++最大的区别就是js是在运行时动态检测值的类型和变化。this是js中的一个关键字,它代表当前作用域的上下文环境,而且随着上下文的改变而动态变化。这篇文章我们将详细介绍Javascript中绑定this的三种方法与简单的比较。
    2016-10-10
  • uni-app应用配置manifest.json最全最详细配置

    uni-app应用配置manifest.json最全最详细配置

    这篇文章主要给大家介绍了关于uni-app应用配置manifest.json最全最详细配置,manifest.json文件是UniApp开发中用来配置应用信息的重要文件,文中通过代码介绍的非常详细,需要的朋友可以参考下
    2024-01-01
  • IE6/7/8中Option元素未设value时Select将获取空字符串

    IE6/7/8中Option元素未设value时Select将获取空字符串

    可以看到当忘记写option的value时这些现代浏览器都会尽量返回正确的(客户端程序员想要的)结果value,其容错性比IE6/7/8做的更好。
    2011-04-04
  • LayUI数据接口返回实体封装的例子

    LayUI数据接口返回实体封装的例子

    今天小编就为大家分享一篇LayUI数据接口返回实体封装的例子,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-09-09
  • js 动态选中下拉框

    js 动态选中下拉框

    js 动态选中下拉框
    2009-11-11
  • uniapp实现全局设置字体大小(小中大的字体切换)

    uniapp实现全局设置字体大小(小中大的字体切换)

    随着UniApp的流行,越来越多的开发者选择使用它来构建跨平台应用程序,下面这篇文章主要给大家介绍了关于uniapp实现全局设置字体大小(小中大的字体切换)的相关资料,需要的朋友可以参考下
    2023-06-06
  • JS获取文本框,下拉框,单选框的值的简单实例

    JS获取文本框,下拉框,单选框的值的简单实例

    本篇文章主要是对JS获取文本框,下拉框,单选框值的简单实例进行了介绍,需要的朋友可以过来参考下,希望对大家有所帮助
    2014-02-02

最新评论