object.assign 可实现对象部分属性克隆,需手动构造精简源对象或结合解构赋值;封装 pick 函数可复用;但仅浅拷贝,嵌套对象仍共享引用。

Object.assign 可以实现对象的部分属性克隆,关键在于**只传入需要复制的属性名对应的键值对**,而不是直接传入源对象全量数据。
明确目标属性,手动构造“精简源对象”
最稳妥的方式是先提取出你真正想克隆的属性,组成一个新对象再交给 Object.assign:
- 避免污染或意外复制不需要的属性(比如方法、Symbol 键、继承属性)
- 适合属性名已知且数量不多的场景
- 示例:从 user 对象中只克隆 name 和 email
const partialClone = Object.assign({}, { name: user.name, email: user.email });
// → { name: 'Alice', email: 'a@example.com' }
用解构 + 空对象作为目标,一行完成
结合对象解构语法,可更简洁地抽取指定属性并赋值给新对象:
- 解构时重命名或默认值都可用,灵活性高
- 注意:解构出来的变量需显式写进新对象字面量里
const partialClone = Object.assign({}, { name, email });
封装成可复用的工具函数
当多处需要按字段列表克隆时,可以封装一个 helper 函数:
- 接收源对象和属性名数组,返回仅含这些属性的新对象
- 自动过滤掉源对象中不存在的属性(容错处理)
return Object.assign({}, ...keys.map(key => ({ [key]: obj[key] })) );
}
// 使用
const clone = pick(user, ['name', 'email']); // { name: 'Alice', email: 'a@example.com' }
注意:Object.assign 不支持深层克隆
如果目标属性本身是对象或数组,它只会复制引用,不是深拷贝:
- 修改克隆后对象里的嵌套对象,原对象也会受影响
- 如需深克隆部分属性,应配合 JSON.parse(JSON.stringify(...)) 或结构化克隆(structuredClone)等方案
const clone = Object.assign({}, { profile: user.profile });
clone.profile.city = 'Shanghai'; // user.profile.city 也变成 'Shanghai'
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











