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区别内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!