undefined和null的区别 (新手小白级教程)
undefined和null的区别 (新手小白级教程)
undefined
和 null
都表示“没有值”,但它们的核心区别在于:
-
undefined
是 JavaScript 自动分配的默认值,表示“未定义”,没有原始值;或者说是没有值这么一个东西。换句话说就是:这个地方应该是有一个值的,而你没有去定义,但你又去读取它,这个时候就会返回undefined。 -
null
是开发者主动赋值的空值,表示“空对象引用” (即:一个对象被定义了值为空值)。
一、定义与核心区别
维度 | undefined |
null |
---|---|---|
来源 | 系统自动赋予(默认值) | 开发者手动赋值 |
语义 | “这里应该有值,但还没定义” | “这里应该是一个对象,但现在是空的” |
类型 |
typeof undefined → "undefined"
|
typeof null → "object" (历史遗留问题) |
二、常见场景与示例
1. undefined
的产生场景
-
变量未赋值:
let name; console.log(name); // undefined
-
函数无返回值:
function sayHello() {} console.log(sayHello()); // undefined
-
对象属性未定义:
const obj = {}; console.log(obj.age); // undefined
-
函数参数未传递:
function greet(name) { console.log(name); // 未传参时,name → undefined } greet();
2. null
的产生场景
-
主动清空对象引用:
let data = { id: 1 }; data = null; // 释放内存,表示data不再指向任何对象
-
初始化空值占位:
let user = null; // 稍后从服务器获取数据再赋值
-
DOM获取不存在的元素:
const element = document.getElementById("no-such-id"); console.log(element); // null
三、类型检测与比较
1. 类型检测
console.log(typeof undefined); // "undefined"
console.log(typeof null); // "object"(历史遗留问题,实际应为"null")
2. 相等性比较
-
==
(宽松相等):console.log(null == undefined); // true(规范约定)
-
===
(严格相等):console.log(null === undefined); // false(类型不同)
四、使用建议与避坑指南
1. 使用原则
-
用
undefined
:表示“系统默认的未定义状态”,不要手动赋值。 -
用
null
:表示“开发者主动设置的明确空值”。
2. 常见误区
-
typeof null
的陷阱:// 检测null的正确方式 const isNull = (value) => value === null;
-
JSON序列化的差异:
JSON.stringify({ a: undefined, b: null }); // 结果:'{"b":null}'(undefined被忽略,null保留)
五、总结记忆口诀
“系统未定义用 undefined
,主动清空用 null
”
-
undefined
:系统自动填,变量未赋默认值。 -
null
:开发者主动设,空对象引用要牢记。
通过理解它们的来源和设计意图,我们可以避免混淆,写出更清晰的代码!
上一篇: 【哪些Map支持ke
下一篇: Oracle中处理空