Null 和 Undefined 语义不同:undefined 表示“未初始化”,由 JavaScript 自动赋值;null 表示“主动清空”,由开发者显式赋值。类型上,typeof undefined 为 "undefined",typeof null 却错误返回 "object";相等性上,null === undefined 为 false,但 null == undefined 为 true;数值转换时,Number(undefined) 为 NaN,Number(null) 为 0;使用建议是按意图选择——避免手动赋 undefined,优先用 null 表达明确的空值。

Null 和 Undefined 表示的都是“空”,但它们不是一回事——一个代表“我清空了”,一个代表“还没给值”。区分清楚,代码才不容易出错。
语义本质不同
undefined 是 JavaScript 自动给的默认状态,反映的是“未初始化”或“自然缺失”:
- 变量声明了但没赋值:
let x;→x就是undefined - 函数没写
return,返回值自动是undefined - 访问对象不存在的属性:
{name: 'A'}.age→undefined - 调用函数时少传参数,对应形参也是
undefined
null 是开发者主动写的,表达的是“我明确让它为空”:
- 释放对象引用:
let user = {id: 1}; user = null; - 函数返回“无结果”:
function findUser() { return null; } - 初始化将来存对象的变量:
let modal = null;(比let modal;更清晰)
类型和检测方式不同
typeof undefined 返回 "undefined",typeof null 却返回 "object"——这是历史遗留 bug,但已成标准,不能改。
立即学习“Java免费学习笔记(深入)”;
所以判断时要注意:
-
null === undefined是 false(类型不同) -
null == undefined是 true(规范强制相等,仅此一对) - 安全判断“是否为空值”:用
value == null(简洁)或value === null || value === undefined(更严谨) - 单独判断
null必须用=== null,不能靠typeof
数值转换行为不同
它们在隐式转换中表现差异明显,直接影响运算结果:
-
Number(undefined)→NaN(“没东西”,无法转数字) -
Number(null)→0(“空架子”,被当作零) -
undefined + 1→NaN;null + 1→1 -
String(undefined)→"undefined";String(null)→"null"
使用建议
写代码时按意图选,别混淆:
- 不要手动给变量赋
undefined,那是引擎的事;需要“清空”就用null - 函数可能无有效返回时,显式
return null,比默认返回undefined更易理解 - API 接口字段若明确“无数据”,后端应返回
null;前端解构失败、字段缺失才得undefined - 初始化对象型变量,优先写
let item = null,语义比let item更明确


















