JS对象解构可同时使用重命名和默认值,语法为“源属性名: 目标变量名 = 默认值”,三者须连写;默认值仅在undefined时生效,不覆盖null、0、false或空字符串。

JS 中对象解构可以同时用重命名和默认值,关键在于语法顺序和语义逻辑:冒号(:)负责属性到变量的映射,等号(=)负责兜底赋值,两者可共存且互不干扰。
重命名 + 默认值的写法结构
基本模式是:源属性名: 目标变量名 = 默认值。注意三者必须连写,不能拆开或调换顺序。
-
正确:`years: age = 25` → 从
user.years取值,若不存在则用25 - 错误:`age = 25: years` 或 `years = 25: age` —— 语法非法,会报错
-
无效:`age: years = 25` —— 冒号左右反了,JS 会尝试读
user.age,但你本意是取years
真实场景示例:配置合并与兜底
常见于函数参数处理,比如一个组件接收用户配置,既要重命名字段适配内部逻辑,又要防缺失:
function renderButton({ text: label = '提交', type: btnType = 'primary', size: btnSize = 'medium' } = {}) {
return `<button class="btn ${btnType} ${btnSize}">${label}</button>`;
}
-
text: label把传入的text映射为内部变量label -
= '提交'表示若没传text,就用默认文案 -
= {}在参数整体上加默认空对象,避免传undefined导致解构报错
嵌套对象中继续使用重命名+默认值
解构支持多层嵌套,每层都可以独立设置重命名和默认值:
const user = {
profile: { name: 'Alice', city: 'Beijing' },
settings: {}
};
const {
profile: { name: fullName = 'Anonymous', city: location = 'Unknown' },
settings: { theme = 'light', notifications = true }
} = user;
-
profile: { ... }先把user.profile解构出来,再对它做二次解构 -
name: fullName = 'Anonymous'—— 重命名 + 默认值一步到位 -
settings: { theme = 'light' }同理,即使user.settings是空对象,theme仍能拿到默认值
注意事项:默认值只在 undefined 时生效
这是最容易踩的坑:默认值不会覆盖 null、0、false 或空字符串。
-
const { count = 10 } = { count: 0 }→count是0,不是10 -
const { active = true } = { active: false }→active是false - 如需处理
null或假值,得额外判断,例如:active: isActive = true后接isActive = isActive ?? true


















