Object.assign设置默认值需将默认配置放第一参数,用户配置放后,用空对象避免污染原对象;其为浅拷贝,嵌套对象无法合并,可用展开运算符替代但不兼容null/undefined。

用 Object.assign 设置默认值,本质是“把默认配置作为目标对象,再用用户配置覆盖它”。关键在于顺序不能错——默认值必须放在第一个参数位置。
正确写法:默认值在前,自定义配置在后
这样能确保用户传入的属性覆盖默认值,没传的则保留默认值:
const defaults = { theme: 'light', fontSize: 14, autoSave: true };const userConfig = { theme: 'dark', fontSize: 16 };const finalConfig = Object.assign({}, defaults, userConfig);
结果:{ theme: 'dark', fontSize: 16, autoSave: true }。注意第一个参数用了空对象 {},避免污染原始 defaults。
常见错误:顺序颠倒或直接修改 defaults
如果写成 Object.assign(defaults, userConfig),会直接改写 defaults,影响后续使用;如果把 userConfig 放前面,比如 Object.assign({}, userConfig, defaults),那默认值反而会覆盖用户配置,失去意义。
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
立即学习“Java免费学习笔记(深入)”;
处理嵌套对象要小心
Object.assign 是浅拷贝,对嵌套对象无效:
const defaults = { style: { color: 'black', size: 'm' } };const userConfig = { style: { color: 'blue' } };- 执行后
style.size会丢失,变成{ style: { color: 'blue' } },不是预期的合并效果。
这时建议用深拷贝方案(如 structuredClone 或第三方库),或手动处理嵌套字段。
更现代的替代写法(可选)
ES6+ 可用展开运算符替代,语义更清晰:
const finalConfig = { ...defaults, ...userConfig };- 同样支持浅合并,默认值在前、用户配置在后。
- 但注意:展开运算符不兼容 null/undefined,而
Object.assign会跳过它们。

















