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,后续要 ?? 兜底或再收窄。
Web-Tutorial.com

Web-Tutorial 技术团队

由多位开发者共同维护的编程教程平台。每篇教程由对应领域的开发者编写和审核,确保内容准确可靠。如发现任何问题,欢迎向我们反馈。

100%

🙏 帮我们做得更好

我们是刚上线的编程教程站,几个人的小团队,精力有限。页面虽经检查,难免还有疏漏——链接失效、排版错乱、内容有误、语言生硬……

如果您发现了,麻烦告诉我们,我们会在收到反馈后第一时间进行修复,再次感谢您的光临 🙏