JavaScript中无“空指针异常”,而是TypeError;应优先用可选链(?.)规避非法访问,配合空值合并(??)设默认值,函数参数解构设默认值,并依场景谨慎判空。

JavaScript 本身没有“空指针异常”这个术语——它抛出的是 TypeError: Cannot read property 'xxx' of null 或 ...of undefined。这类错误本质是尝试访问 null 或 undefined 的属性或方法,和 Java 的 NullPointerException 逻辑相似,但机制不同。安全处理的关键不是“捕获异常”,而是**提前规避非法访问**。
用可选链操作符(?.)安全读取嵌套属性
这是现代 JS 最简洁、最推荐的方式,适用于读取对象深层属性、调用方法或访问数组元素:
-
user?.profile?.name→ 若user或profile为null/undefined,整个表达式直接返回undefined,不报错 -
obj?.method?.()→ 安全调用可能不存在的方法 -
arr?.[0]→ 安全访问数组首项,即使arr是null
用空值合并操作符(??)提供默认值
当值可能是 null 或 undefined(但不是其他假值如 0、false、''),用 ?? 比 || 更精准:
-
const name = user?.name ?? '匿名用户'→ 只有user?.name确实是null或undefined才用默认值 - 避免误把
0或false当成“空”而覆盖掉合法业务值
函数参数与解构时主动设默认值
从源头减少 undefined 流入:
立即学习“Java免费学习笔记(深入)”;
- 函数参数:
function greet({ name = '访客', age = 0 } = {}) { ... }—— 解构同时兜底,且支持整个对象为undefined的情况 - 避免写
function greet(user) { return user.name; }这类裸访问
必要时手动判空,但要区分 null 和 undefined
在类型敏感场景(如与后端约定 null 表示“明确无值”,undefined 表示“未传”),可用严格判断:
-
if (obj === null || obj === undefined)或更简写if (obj == null)(因null == undefined为 true) - 慎用
!obj:它会把0、false、''都判为真,易出错 - 需要强类型保障时,配合 TypeScript 的非空断言(
!)或可选属性声明更可靠


















