前言
Object.assign
是 JavaScript 中的一个方法,用于将一个或多个源对象的所有可枚举属性拷贝到目标对象。它的基本作用是实现对象的合并或属性的赋值。
复制属性
语法
1 | Object.assign(target, ...sources) |
参数
- target: 目标对象,属性将被拷贝到这个对象上。
- sources: 一个或多个源对象,从中拷贝属性到目标对象。
示例1
1 | const target = { a: 1 }; |
示例2
1 | const obj1 = { a: 1 }; |
注意事项
- 浅拷贝:
Object.assign
执行的是浅拷贝,如果源对象的属性值是对象类型,那么目标对象中的属性值仍然是对源对象中对象的引用。 - 属性的顺序: 如果多个源对象中包含相同的属性,后面的源对象中的属性值会覆盖前面源对象中的属性值。
- 不可枚举属性:
Object.assign
只会拷贝可枚举属性,不会拷贝不可枚举的属性。
只复制有值的属性
Object.assign
本身不会自动过滤掉值为 undefined
或 null
的属性。如果你希望在合并对象时只包含那些值为非 undefined
或非 null
的属性,你可以通过自定义函数来实现这一点。
1 | function assignNonEmpty(target, ...sources) { |
在这个示例中,assignNonEmpty
函数会遍历每个源对象,并将那些值既不为 undefined
也不为 null
的属性合并到目标对象中。
这样,合并后的对象只包含有实际值的属性。
只复制有值且目标有的属性
1 | function assignOnlyExistingAndNonEmpty(target, ...sources) { |