JavaScript解构赋值中默认值仅在属性为undefined时生效,支持对象、数组及嵌套解构,且默认值可为表达式或函数调用(惰性求值)。

在 JavaScript 解构赋值中,为属性设置默认值非常简单,只需在等号后直接写 = 值 即可。它适用于对象解构和数组解构,且默认值只在对应属性为 undefined 时生效(null、false、0、'' 等“falsy”值不会触发默认值)。
对象解构中的默认值
当从对象中提取属性时,可在变量名后用 = 指定默认值:
- 如果原对象不含该属性,或属性值为
undefined,就使用默认值 - 属性存在且值为
null、0、false、空字符串等,仍保留原值,不会回退到默认值
例如:
const obj = { name: 'Alice', age: 0 };const { name, age = 25, city = 'Beijing' } = obj;
console.log(name); // 'Alice'
console.log(age); // 0(不是 25)
console.log(city); // 'Beijing'(因为 obj.city 是 undefined)
嵌套对象解构 + 默认值
嵌套解构时,可以在任意层级添加默认值,包括为整个嵌套子对象设默认空对象,避免报错:
立即学习“Java免费学习笔记(深入)”;
- 先给嵌套对象本身设默认值(如
profile = {}),再从中解构其属性 - 否则若原始对象没有该嵌套字段,直接解构会报
Cannot destructure property ... of undefined
例如:
const user = { id: 123 };const {
id,
profile = {},
profile: { avatar = '/default.png', level = 1 }
} = user;
console.log(avatar); // '/default.png'
console.log(level); // 1
数组解构中的默认值
数组解构同样支持默认值,按索引位置匹配,缺失项(undefined)触发默认值:
- 可以跳过某些位置(用逗号占位),只为特定索引设默认值
- 剩余元素(
...rest)前也可以有默认值
例如:
const arr = ['a'];const [first, second = 'b', third = 'c'] = arr;
console.log(first); // 'a'
console.log(second); // 'b'
console.log(third); // 'c'
const [x, , z = 'default'] = ['x', 'y']; // 跳过第二个元素
console.log(x); // 'x'
console.log(z); // 'default'
默认值支持表达式和函数调用
默认值不限于字面量,可以是任意表达式,包括函数调用、逻辑运算、甚至新对象创建:
- 表达式只在需要时执行(惰性求值),不会提前运行
- 适合用于开销较大或有副作用的操作(如 API 请求、生成唯一 ID)
例如:
function getDefaultName() {console.log('generating default name');
return 'Anonymous';
}
const { name = getDefaultName() } = {};
// 控制台输出 'generating default name',name 为 'Anonymous'


















