本文摘录自GPT
Object.assign 是 JavaScript 中用来复制对象的一个方法。它可以把一个或多个源对象的所有可枚举属性复制到目标对象中,返回这个目标对象。下面我会用一些简单的例子来说明它的用法。
基本用法
假设我们有两个对象:
const obj1 = { a: 1, b: 2 };
const obj2 = { b: 3, c: 4 };
我们想把 obj2 的属性复制到 obj1 中,可以这样做:
Object.assign(obj1, obj2);
执行完这段代码后,obj1 变成了:
{ a: 1, b: 3, c: 4 }
注意:obj1 中的属性 b 被 obj2 中的属性 b 覆盖了。
创建新对象
如果我们不想改变原来的对象,而是想创建一个新的对象,可以把第一个参数设为一个空对象 {}:
const obj1 = { a: 1, b: 2 };
const obj2 = { b: 3, c: 4 };
const newObj = Object.assign({}, obj1, obj2);
这样 obj1 和 obj2 都不会被修改,而 newObj 的值是:
{ a: 1, b: 3, c: 4 }
多个源对象
Object.assign 还可以接受多个源对象。比如:
const obj1 = { a: 1 };
const obj2 = { b: 2 };
const obj3 = { c: 3 };
const newObj = Object.assign({}, obj1, obj2, obj3);
newObj 的值是:
{ a: 1, b: 2, c: 3 }
用途总结:
- 合并对象:把多个对象的属性合并到一个目标对象中。
- 克隆对象:创建一个对象的浅拷贝。
- 为对象添加属性:给一个对象添加新的属性。
注意事项
- 浅拷贝:Object.assign 进行的是浅拷贝,如果源对象的属性值是对象,那么复制的是对象的引用,而不是对象本身。
- 同名属性覆盖:当多个源对象有同名属性时,后面的源对象的属性值会覆盖前面的。
示例代码
下面是一个完整的示例代码,展示了 Object.assign 的各种用法:
const person = { name: 'Alice' };
const details = { age: 25, city: 'New York' };
const extra = { city: 'Los Angeles', hobby: 'Reading' }; const merged = Object.assign({}, person, details, extra);
console.log(merged); // 输出: { name: 'Alice', age: 25, city: 'Los Angeles', hobby: 'Reading' }
在这个例子中,extra 对象的 city 属性覆盖了 details 对象的 city 属性。