对象解构可重命名并设默认值,语法为{原属性名:新变量名=默认值},仅当原属性为undefined时生效;嵌套结构中需为中间层设默认空对象防错。

可以在重命名的同时设置默认值,语法是 { 属性名: 新变量名 = 默认值 },关键在于冒号和等号的顺序不能错。
重命名 + 默认值的写法
对象解构中,重命名用 : 指定新变量名,设置默认值用 =,两者可以连用。只要原属性不存在或值为 undefined,默认值就会生效。
-
const { name: userName = 'Anonymous' } = {};→userName是'Anonymous' -
const { age: userAge = 18 } = { age: 25 };→userAge是25(有值,不触发默认) -
const { gender: userGender = '保密' } = { name: '李四' };→userGender是'保密'(gender属性根本不存在)
注意默认值生效的条件
默认值只在属性值严格等于 undefined 时才起作用。如果属性存在但值是 null、0、false 或空字符串,不会使用默认值。
-
const { count: num = 10 } = { count: 0 };→num是0,不是10 -
const { flag: ok = true } = { flag: false };→ok是false -
const { role: userRole = 'guest' } = { role: undefined };→userRole是'guest'
嵌套对象里也能这么用
重命名和默认值可以组合在嵌套结构中,比如从 user.profile?.name 提取并设默认:
const { profile: { name: fullName = '未知用户' } = {} } = user;- 这里
profile = {}是给profile层设的默认值,防止其为undefined导致报错 - 再在其内部对
name重命名为fullName并设默认
常见错误提醒
别把顺序搞反了——{ name = 'X' : newName } 是语法错误;必须是 { name: newName = 'X' }。
- 冒号左边是源属性名,右边是目标变量名(可带默认值)
- 不能对未声明的属性直接重命名加默认,比如
{ missingProp: x = 'ok' }是合法的,只要missingProp在源对象里没定义,x就取默认值 - 所有变量名(包括重命名后的)都必须符合标识符规则,不能是数字开头或含特殊符号


















