javascript解构赋值中默认值仅对undefined生效,语法为属性名后加=及默认值;嵌套解构需为中间层设默认空对象防报错;函数参数解构需整体设默认{},默认值支持惰性求值表达式。

在 JavaScript 中,为解构出来的对象属性指定默认值,是在解构赋值的语法中直接写在属性名后的 = 后面,而不是在对象定义里设置。
基础语法:为单个属性设默认值
当解构的对象中缺失某个属性,或该属性值为 undefined 时,会启用默认值;注意:null、false、0、'' 等 falsy 值不会触发默认值,只有 undefined 才会。
const obj = { name: 'Alice' };
const { name, age = 25 } = obj;
console.log(name); // 'Alice'
console.log(age); // 25(因为 obj.age 是 undefined)
为嵌套属性设默认值
嵌套解构时,可以在任意层级的属性后加默认值,但需确保中间层级存在或也设了默认对象。
- 如果中间对象不存在(如
user.profile是undefined),直接解构其子属性会报错,所以要给中间层设默认空对象:
const user = { name: 'Bob' };
const { profile = {}, profile: { avatar = 'default.png' } } = user;
console.log(avatar); // 'default.png'
- 更安全的写法是逐层提供默认对象:
const {
profile = {},
profile: { avatar = 'default.png', bio = 'No bio' }
} = user;
结合函数参数解构设默认值
函数参数支持解构 + 默认值,非常实用:
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
function greet({ name = 'Guest', msg = 'Hello' } = {}) {
console.log(`${msg}, ${name}!`);
}
greet({ name: 'Tom' }); // 'Hello, Tom!'
greet({}); // 'Hello, Guest!'
greet(); // 'Hello, Guest!'(因为参数整体也设了默认 {})
⚠️ 注意:函数参数整体的默认值 = {} 很关键。如果没有它,传入 undefined 会导致解构失败(Cannot destructure property of undefined)。
默认值可以是表达式或函数调用
默认值不限于字面量,可以是任意表达式,且只在需要时执行(惰性求值):
function createId() {
console.log('generating id...');
return Date.now();
}
const { id = createId() } = {}; // 控制台会输出 'generating id...'
const { id2 = createId() } = { id2: 100 }; // 不会执行 createId()
默认值机制简单清晰,关键是记住它只对 undefined 生效,合理使用能写出更健壮、可读性更强的解构代码。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










