📜  JavaScript Object Assign()方法(1)

📅  最后修改于: 2023-12-03 15:16:06.078000             🧑  作者: Mango

JavaScript Object Assign()方法

在JavaScript中,Object.assign()方法可以将一个或多个源对象的属性复制到目标对象中,并返回目标对象。这个方法可以被用来合并对象,或将一个或多个对象的属性覆盖到另一个对象中。

语法
Object.assign(target, ...sources)

参数说明:

  • target:要复制到的目标对象。
  • sources:一个或多个源对象,用于复制属性的值。
例子
const target = { a: 1, b: 2 };
const source = { b: 4, c: 5 };

const result = Object.assign(target, source);

console.log(result);
// 输出: { a: 1, b: 4, c: 5 }

在这个例子中,我们有一个目标对象 target 和一个源对象 source 。当我们调用 Object.assign() 方法并将目标对象和源对象传递给它时,target 对象的属性 b 被覆盖,因为在源对象 source 中,属性 b 的值为 4,所以最终结果中 b 的值就是 4

处理引用类型的属性值

在使用 Object.assign() 方法时,值为对象的属性也会被复制,但是指向同一个引用。这意味着,如果我们修改了复制源对象的值,那么目标对象的属性值也会被修改。

const obj1 = { a: 1, b: { c: 2 } };
const obj2 = { d: 3, e: 4 };

const result = Object.assign({}, obj1, obj2);

obj1.b.c = 20;

console.log(result);
// 输出: { a: 1, b: { c: 20 }, d: 3, e: 4 }

在这个例子中,属性 b 的值是对象,所以指向的是同一个引用。当我们改变源对象 obj1.b 中的属性 c 时,目标对象 result.b 中的属性 c 也随之被修改。

为了避免这个问题,在合并对象时,需要使用深拷贝来复制属性值。我们可以使用 JSON.parse()JSON.stringify() 来进行深拷贝:

const obj1 = { a: 1, b: { c: 2 } };
const obj2 = { d: 3, e: 4 };

const result = JSON.parse(JSON.stringify(Object.assign({}, obj1, obj2)));

obj1.b.c = 20;

console.log(result);
// 输出: { a: 1, b: { c: 2 }, d: 3, e: 4 }

在上述例子中,我们使用了 JSON.parse()JSON.stringify() 来进行深拷贝,从而避免了源对象的属性值被修改的问题。

总结

Object.assign() 方法是一个用于将一个或多个对象的属性复制到目标对象中的方法。它可以被用于合并对象,或将一个或多个对象的属性覆盖到另一个对象中。当值为引用类型的属性被复制时,需要使用深拷贝来进行属性值的复制。