Object.assign() 是 ES6 新增的方法,可用于将源对象的所有可枚举属性复制到一个目标对象中。本文将深入解析 Object.assign() 的使用技巧,并提供详细的示例代码。
Object.assign() 基本语法
Object.assign(target, ...sources)
- target:目标对象
- sources:一个或多个源对象
Object.assign() 拷贝属性
Object.assign() 可以将源对象的所有可枚举属性复制到目标对象。如果目标对象中已经有同名属性了,那么将被覆盖。对于字面量对象,使用 Object.assign() 可以实现浅拷贝。
const source = {a: 1, b: 2}; const target = {c: 3, d: 4}; Object.assign(target, source); console.log(target); // {c: 3, d: 4, a: 1, b: 2}
Object.assign() 拷贝 Getters 和 Setters
Object.assign() 只拷贝源对象中的可枚举属性,即不包括 get 和 set 方法。如果想把 getter 和 setter 方法也拷贝到目标对象,需要使用 Object.getOwnPropertyDescriptors() 方法。
-- -------------------- ---- ------- ----- ------ - - --- --- - ------ -- - -- ----- ------ - --- ------------------------------- ------------------------------------------ ---------------------- -- -
Object.assign() 拷贝 Symbol 类型属性
Object.assign() 可以拷贝 Symbol 类型属性,但是只拷贝可枚举的 Symbol 属性。
-- -------------------- ---- ------- ----- ------ - - ------------------ -- -- - -- ----- ------ - --- --------------------- -------- -------------------- -- --- -- ------------ --
使用 Object.assign() 合并对象
使用 Object.assign() 可以合并多个对象,将它们的属性合并到一个目标对象中。
const obj1 = {a: 1}; const obj2 = {b: 2}; const obj3 = {c: 3}; const merged = Object.assign({}, obj1, obj2, obj3); console.log(merged); // {a: 1, b: 2, c: 3}
使用 Object.assign() 更新对象
使用 Object.assign() 可以轻松地更新对象的属性。
-- -------------------- ---- ------- ----- ------ - - -- -- -- -- -- - -- ----- ------- - ----------------- ------- - -- -- -- - --- --------------------- -- --- -- -- -- -- --
使用 Object.assign() 克隆对象
使用 Object.assign() 可以克隆一个新的对象。
const obj = {a: 1}; const clone = Object.assign({}, obj); console.log(clone); // {a: 1}
Object.assign() 注意事项
- Object.assign() 是浅拷贝,如果源对象的属性是一个对象或数组,拷贝结果只是它们的引用。
- undefined 和 null 类型不能作为目标对象。
- Object.assign() 只拷贝源对象的自有属性,也就是不包括继承属性。
总结
Object.assign() 是一个非常实用的方法,它可以实现对象的复制、合并、更新等操作。在实践中,需要根据具体场景,综合考虑使用 Object.assign() 的注意事项,充分利用它提供的功能,提高开发效率。
参考文献
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/6469b89c968c7c53b098f2d9