最简单有效的解构防错法是提前用空对象兜底:user || {} 适配所有 falsy 值,user ?? {} 仅处理 null/undefined;嵌套解构需逐层设默认值;函数参数和 api 数据解析也应结合默认值与空对象兜底。

直接在解构前把可能为空的值“兜住”,不让 null 或 undefined 进入解构过程,是最简单也最有效的办法。
用空对象兜底(最常用)
解构前用 || {} 或 ?? {} 把源值转成空对象,就能避免 TypeError:
-
const { name, age } = user || {};—— 适合user可能为null、undefined、false、0等 falsy 值的场景 -
const { name, age } = user ?? {};—— 更精准,只在user是null或undefined时生效,保留0、false、''等合法值
嵌套解构必须逐层设默认值
只兜外层不够。比如 user.profile.avatar,若 user.profile 是 undefined,内层解构仍会崩溃:
- ❌ 错误:
const { profile: { avatar } } = user; - ✅ 正确:
const { profile: { avatar = '/default.png' } = {} } = user ?? {}; - 等价写法(更清晰):
const { profile = {} } = user ?? {};,再const { avatar = '/default.png' } = profile;
函数参数里直接防御
函数接收对象参数时,可在形参位置就设好默认值,连传 null 都安全:
function renderUser({ name = '匿名', age = 0 } = {}) { ... }- 调用
renderUser(null)或renderUser()都不会报错
对接 API 数据时结合别名与默认值
后端字段名常不规范,可一边重命名一边兜底:
const { usr_name: name = '未知', is_active: isActive = false, created_at: createdAt = Date.now() } = apiData ?? {};- 注意:
=只对undefined生效,null会原样传入,所以外层?? {}不能省
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











