在 JavaScript 中,null 和 undefined 都表示“无”或“空”,但它们的含义、使用场景和行为有本质区别:
null的类型是object。undefined的类型是undefined。
typeof null; // "object"
typeof undefined; // "undefined"
一、区分
null表示一个空对象指针。 也就是说,它通常表示一个对象应该存在,但目前是空值。 它是一种故意为之的“无值”。 程序赋予的。undefined表示一个变量声明了但未赋值,或者一个对象缺少某个属性,或者函数没有返回值(或者return语句没有明确返回值)。 它是一种更偏向于“不存在”或者“未定义”的含义。 引擎赋予的。
理解:
对于 null你可以把它想象成一个盒子,这个盒子存在,但是里面是空的。 你明确地知道这个盒子什么都没有装。对于 undefined你可以把它想象成根本没有这个盒子。 它未曾被声明,或者本该是某个盒子的东西,现在没了。
二、null 的使用场景
1.显示的表示“空值”
显式地赋值给一个变量,用来表示该变量目前不引用任何对象
let data = null; // 明确表示“无数据”
let myObject = { name: "Alice" };
myObject = null; // 现在 myObject 不再指向任何对象
2.释放对象引用
let obj = { name: "Alice" };
obj = null; // 帮助垃圾回收机制释放内存
三、undefined 使用场景
1. 变量声明但未赋值
let a;
console.log(a); // undefined
2.函数无返回值时
function foo() {}
console.log(foo()); // undefined
3.访问对象不存在的属性
const obj = {};
console.log(obj.key); // undefined
4.函数参数未传递时
function bar(param) {
console.log(param); // undefined(未传参)
}
bar();
四、比较
| 行为 | undefined | null |
|---|---|---|
typeof 结果 | "undefined" | "object"(历史遗留 Bug) |
| 与自身比较 | undefined === undefined → true | null === null → true |
宽松相等(==) | undefined == null → true | (因为它们都被视为“假值”) |
严格相等(===) | undefined === null → false | (类型不同) |
五、总结
| 维度 | undefined | null |
|---|---|---|
| 来源 | 系统自动分配 | 开发者手动赋值 |
| 语义 | “值未定义”(意外情况) | “值为空”(主动意图) |
| 类型检查 | 类型是 undefined | 类型是 object(历史遗留问题) |
| 内存占用 | 无(原始值) | 空指针(不指向任何对象) |
最佳实践:
- 尽量使用
===和!==进行比较,避免类型转换带来的意外结果。 - 显式地将变量赋值为
null来表示该变量目前不引用任何对象。 - 尽量避免出现
undefined,可以通过预先赋值或者检查属性是否存在来避免。

1万+

被折叠的 条评论
为什么被折叠?



