CuZaoo的程序文档

一个啥活都参与的程序员

0%

[JS]讨论null和undefined的区分和使用场景

JavaScript 中 nullundefined 的区别及使用场景

1. 为什么存在 nullundefined

在 JavaScript 中,nullundefined 是为了表示两种不同概念:

  • undefined:表示变量已声明,但尚未赋值。
  • null:表示变量已赋值,但特意赋为 “空值”。

2. 区别详解

(1) 语义

  • undefined:表示变量已声明,但尚未初始化。
  • null:表示变量有意被赋值为空,通常用于表示对象引用的“空状态”。

(2) 类型

  • undefined 是原始值,属于 undefined 类型
  • null 是原始值,属于 object 类型(这是一个历史遗留问题)。
1
2
console.log(typeof undefined); // "undefined"
console.log(typeof null); // "object"

(3) 比较

  • 松散比较 ==:null==undefinedtrue,这是一个强制规定
  • 严格比较 ===: null==undefinedfalse,因为类型不同
1
2
console.log(null == undefined);  // true
console.log(null === undefined); // false

3. 使用场景

(1) 使用 undefined

  • undefined 通常由 JavaScript 自动分配,不需要显式赋值:
    • 表示变量 “未被赋值”。
    • 表示对象属性不存在。
    • 表示函数参数未传递。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
// 变量未赋值
let a;
console.log(a); // 输出 undefined

// 对象属性不存在
let obj = {};
console.log(obj.value); // undefined

// 函数参数未传递
function test(param) {
console.log(param); // undefined
}

test();

(2) 使用 null

  • null 需要开发者主动赋值,用于表示 “空值” 或 “空对象”:
    • 初始化一个变量,表示未来会赋值。
    • 表示资源尚未分配或不需要时显式清空。
1
2
3
4
5
6
7
8
9
// 初始化为空值
let data = null;
console.log(data); // null

// 一开始未初始化对象
let person = null;
if (isDataReady()) {
person = {name: "John"};
}

4. 默认值为 undefined

如果声明了变量但没有赋值,它的默认值为 undefined:

1
2
var i;
console.log(i); // undefined