null / undefined null 与 undefined
最后更新:2026-10-22
null / undefined null 与 undefined
null 表示"刻意为空",undefined 表示"还没赋值/不存在"。开启 strictNullChecks 后它们是独立类型,必须先处理空值才能当正常值用。
| 分组 | 基础类型 |
|---|---|
| 类型 | 类型 |
| 严格模式 | 需要 |
ℹ️ 说明 编辑器将 TypeScript 转译为 JavaScript 后运行(不做类型检查);类型检查结果见示例 Output。
📝 语法
let nickname: string | null = null;
if (nickname !== null) {
nickname.toUpperCase(); // 排除 null 后才能用
}
let maybe = list.find(x => x.ok); // undefined 表示没找到
⚙️ 参数
| a?.b | 左侧为 null/undefined 时整个表达式短路成 undefined,不报错 |
|---|---|
| a ?? b | 左侧为 null/undefined 时取右侧默认值;0 和 "" 不会被跳过 |
返回值:无返回值——null/undefined 是基础类型注解,不产生任何运行时代码。
▶ 示例
修改下面的代码,点击试一试查看转译运行结果:
输出:
Ada guest
0
(转译后运行输出;strictNullChecks 开启时,直接调用 missing.length 会得到编译错误)
💡 要点
⚠️ 注意 strictNullChecks 关闭时 null/undefined 能赋给任何类型,空指针全靠自觉。新项目务必开 strict。
💡 提示 ?. 与 ?? 是处理可空值的黄金搭档:user?.address?.city ?? "unknown" 一行搞定取值+兜底。
ℹ️ 说明 ?? 只在左侧为 null/undefined 时取右侧,0、false、"" 都会保留——这是它与 || 最关键的区别。
🏷️ 相关基础类型
💡 相关案例
更多案例即将上线。
📚 相关教程
❓ 常见问题
Q ?? 和 || 有什么区别?
A || 把一切假值(0、""、false)都当成"空"而取右侧;?? 只认 null/undefined。设置默认值几乎总该用 ??,否则 0 和空字符串会被误覆盖。
Q null 和 undefined 在语义上怎么区分?
A 惯例:undefined = 还没有值(参数没传、属性缺失);null = 刻意置空(清除了值)。在一个 API 里保持同一种用法即可。
Q 可选链之后值的类型变成什么?
A T | undefined:只要链上任何一环可能为空,结果就带上 undefined,后续要 ?? 兜底或再收窄。