最轻量可靠的防崩溃方式是直接检查 === null 并配合可选链(?.)和空值合并(??);需避免 typeof null 误判为 object,推荐用 value !== null && typeof value === 'object' 双重确认,或一步到位使用 user?.name、user?.profile?.avatar ?? '/default.png' 等安全访问语法。

直接检查 === null 并配合可选链(?.)和空值合并(??),是最轻量又可靠的防崩溃方式。关键不是“绕开 null”,而是让 null 在它该出现的地方被明确识别和处理。
访问对象属性前先做显式判空
别依赖 typeof value === 'object' 来判断是否能取属性——因为 typeof null 也返回 "object",会误放 null 进入后续逻辑,一访问就报 Cannot read properties of null。
- 用
value !== null && typeof value === 'object'双重确认,确保是真对象 - 更推荐一步到位:用可选链
user?.name或空值合并user?.profile?.avatar ?? '/default.png',既安全又简洁 - 对函数调用也适用:
handler?.(data),null/undefined 时自动跳过,不报错
数值计算前转成有效数字
null 参与算术运算会变成 NaN,而 NaN * 100 还是 NaN,污染整个结果链。不能靠 || 0 捕获,因为 0 本身是合法值。
- 统一用
Number(val) || 0:把 null、undefined、空字符串都转成 0,适合“无值即零”的业务场景 - 若需区分 null 和
0,改用val == null ? 0 : Number(val)或Number(val ?? 0) - 对浮点数,优先用
parseFloat(val) ?? 0,比Number()更贴近输入语义(如"12.5px")
在计算属性或派生逻辑里主动兜底
计算属性不是“自动容错工具”,它的价值在于把边界处理集中到 get 函数内部,不让 null 穿透到模板或副作用中。
立即学习“Java免费学习笔记(深入)”;
- 对象解构前加默认:
const { name = '游客', email = '' } = user || {} - 深层路径分层判断:
order?.items?.[0]?.product?.name ?? '未知商品' - 布尔值不靠
!!val,明确写val === true或Boolean(val)并注释意图
类型层面强化 null 意图(配合 TypeScript)
null 不是占位符,是业务语义:“已知为空”。TypeScript 的 strictNullChecks 能帮你提前暴露问题。
- 声明变量时明确可空性:
let editor: Editor | null = null; - 函数参数标注可空:
function save(id: string | null),调用方必须处理 null - 禁用模糊的
if (!val),改用if (val === null)或if (val != null)表达真实意图


















