null是javascript中表示“有意缺失的对象引用”的原始值,非空对象;typeof null返回"object"是历史bug;它无属性方法,与{}严格不等;常用于初始化、释放引用或表示查找失败;应使用===精确检测,避免与undefined混用。

null 在 JavaScript 中是一个原始值,专门用来表示“有意缺失的对象引用”——它不是对象,也不是空对象,而是一个**明确的、表示“这里本该有对象,但现在没有”的占位符**。
为什么 null 不是空对象?
很多人误以为 null 是“空对象”,其实完全不是:
-
typeof null返回"object"(这是历史遗留 bug,ECMAScript 规范已明确将其定义为原始值); -
null === {}是false;null == {}也是false; -
null没有任何属性或方法,访问null.xxx会直接抛出TypeError; - 真正的空对象是
{},它是一个拥有Object.prototype的对象实例。
null 的典型使用场景
它常用于主动释放对象引用、初始化可能后期赋值的对象变量,或作为函数返回值表示“找不到目标对象”:
Java项目代码review工具。分析Git变更+完整调用链路上下文,推断业务需求,进行多维度评分和分类汇总,生成完整PRD文档。包含细粒度Java代码审查清单(Null安全、异常处理、Streams、并发、equals/hashCode、资源管理、API设计、性能、MyBatis/ORM、事务边界、SQL/DD...
- 初始化一个将来要存对象的变量:
let user = null; - 显式清空引用(帮助垃圾回收):
domElement = null; - API 返回值约定:
document.getElementById('nonexistent')返回null; - 函数逻辑中表示“无结果”:
function findAdmin(users) { return users.find(u => u.role === 'admin') || null; }
安全检查 null 的正确方式
由于 null == undefined 为 true,但语义不同,推荐用严格相等判断:
- ✅ 推荐:
if (obj === null)—— 精确检测是否为 null; - ⚠️ 小心:
if (!obj)会把0、''、false、null、undefined都判为真值,不精准; - ✅ 更健壮的空值检查(含 null 和 undefined):
if (obj == null)(利用抽象相等的特性),或现代写法if (obj ?? false)(空值合并)。
别和 undefined 混用
null 是开发者**主动赋的值**,表达“此处应有对象,但我把它清空了”;undefined 是系统默认值,表示“此处还没被赋值”或“属性不存在”。二者语义不同,混用会降低代码可读性:
- ❌ 不推荐:
let data = undefined;(意图模糊); - ✅ 推荐:
let data = null;(明确表示“暂无有效对象”); - 函数参数默认值建议用
undefined触发,默认行为;返回值或状态字段建议用null表示“查找失败”或“未找到对象”。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










