undefined 表示系统自动赋予的“未初始化”状态,null 表示开发者主动设置的“有意为空”;判断时应区分使用 === undefined、=== null 或 ?? 操作符。

undefined 和 null 都表示“空”,但用在哪、为什么用,差别很实在。关键不是记规则,而是看“谁在控制这个空”——是语言自动给的,还是你主动设的。
undefined:系统默认的“还没填”
它不靠你写,JavaScript 自己就填上了,代表“本该有值,但目前没给”。常见于这些地方:
- 变量声明了但没赋值:
let user;→user就是undefined - 函数没写
return:function getName() { console.log('hi'); }→ 调用后返回undefined - 访问对象里根本不存在的属性:
{name: 'Tom'}.age→undefined - 调用函数时少传参数:
function calc(a, b) { return a + b; } calc(5);→b是undefined
null:你亲手写的“清空”
它必须你主动写出来,代表“我知道这里该有个东西,但现在明确不要它”。典型用于:
- 初始化一个将来会存对象的变量:
let modal = null;(后面会赋值为 DOM 元素) - 主动释放大对象引用,帮垃圾回收:
let bigData = { /*...*/ }; bigData = null; - API 返回“查无结果”:
document.getElementById('missing-id')返回null - 函数明确表示“这次真没东西可给”:
function findAdmin() { return users.find(u => u.role === 'admin') || null; }
判断时别只靠 == 或 ==
null == undefined 是 true,但这是历史包袱,不是设计本意。实际开发中建议:
- 检查是否“未初始化或缺失”:用
value === undefined或更稳妥的typeof value === 'undefined' - 检查是否“被清空或有意为空”:直接用
value === null - 想同时覆盖两种空值(比如做默认值):
value ?? 'default'(空值合并操作符),它只对null和undefined生效,不误伤0、false、''
一个简单心法帮你选
问自己一句:这个空,是我写的,还是 JS 帮我写的?
- 你没写任何值,JS 自动给了 → 用
undefined - 你写了
null,就是想说“这儿空着,我心里有数” → 用null
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











