ES6 中利用 Object.assign 实现对象拷贝和合并的技巧

在前端开发中,经常需要对对象进行拷贝和合并操作。ES6 中提供了一种方便的方式来实现这些操作,即使用 Object.assign 方法。本文将介绍如何使用 Object.assign 实现对象拷贝和合并,并提供示例代码和使用技巧。

什么是 Object.assign

Object.assign 是 ES6 中的一个方法,用于将一个或多个源对象的属性复制到目标对象中。它的语法如下:

--------------------- -----------

其中,target 表示目标对象,sources 表示一个或多个源对象。Object.assign 方法会将所有源对象的属性复制到目标对象中,如果源对象中的属性与目标对象中的属性重名,则会覆盖目标对象中的属性。

对象拷贝

使用 Object.assign 方法可以很方便地实现对象的拷贝。我们可以将一个空对象作为目标对象,将要拷贝的对象作为源对象,然后调用 Object.assign 方法即可。示例代码如下:

----- ---- - - ----- -------- ---- -- --
----- ---- - ----------------- ------

------------------ -- - ----- -------- ---- -- -

在上面的代码中,我们将 obj1 对象拷贝到了 obj2 对象中。由于使用了空对象作为目标对象,所以 obj2 中只包含 obj1 中的属性,而没有包含其他属性。

需要注意的是,使用 Object.assign 方法进行对象拷贝时,如果源对象中的属性值是引用类型(如数组、对象等),则目标对象中的属性值也会是引用类型。这意味着,如果修改了目标对象中的属性值,源对象中的属性值也会被修改。示例代码如下:

----- ---- - - ----- -------- -------- ----------- ----------- --
----- ---- - ----------------- ------

-----------------------------

------------------ -- - ----- -------- -------- ----------- ----------- ---------- -
------------------ -- - ----- -------- -------- ----------- ----------- ---------- -

在上面的代码中,我们将 obj1 对象拷贝到了 obj2 对象中,并修改了 obj2 中 hobbies 属性的值。由于 hobbies 属性的值是一个数组,所以 obj1 中的 hobbies 属性的值也被修改了。

为了避免这种情况,我们可以使用深拷贝的方式进行对象拷贝。具体实现方式可以参考 JavaScript 深拷贝的几种方式

对象合并

使用 Object.assign 方法还可以实现多个对象的合并。我们可以将第一个对象作为目标对象,将后面的对象作为源对象,然后调用 Object.assign 方法即可。示例代码如下:

----- ---- - - ----- -------- ---- -- --
----- ---- - - ------- --------- -------- ----------- ----------- --
----- ---- - ----------------- ----- ------

------------------ -- - ----- -------- ---- --- ------- --------- -------- ----------- ----------- -

在上面的代码中,我们将 obj1 和 obj2 两个对象合并到了 obj3 对象中。由于使用了 obj1 作为目标对象,所以 obj3 中包含了 obj1 中的属性和值,同时也包含了 obj2 中的属性和值。

需要注意的是,使用 Object.assign 方法进行对象合并时,如果源对象中的属性值是引用类型(如数组、对象等),则目标对象中的属性值也会是引用类型。这意味着,如果修改了目标对象中的属性值,源对象中的属性值也会被修改。示例代码如下:

----- ---- - - ----- -------- -------- ----------- ----------- --
----- ---- - - -------- ----------- --
----- ---- - ----------------- ----- ------

------------------ -- - ----- -------- -------- ----------- ----------- ---------- -
------------------ -- - ----- -------- -------- ----------- ----------- ---------- -

在上面的代码中,我们将 obj1 和 obj2 两个对象合并到了 obj3 对象中,并修改了 obj3 中 hobbies 属性的值。由于 hobbies 属性的值是一个数组,所以 obj1 中的 hobbies 属性的值也被修改了。

为了避免这种情况,我们可以使用深合并的方式进行对象合并。具体实现方式可以参考 JavaScript 深合并的几种方式

总结

使用 Object.assign 方法可以很方便地实现对象的拷贝和合并。需要注意的是,如果源对象中的属性值是引用类型(如数组、对象等),则目标对象中的属性值也会是引用类型。为了避免这种情况,我们可以使用深拷贝和深合并的方式进行对象拷贝和合并。在实际开发中,需要根据具体情况选择合适的方式进行对象操作。

示例代码如下:

-- ----
----- ---- - - ----- -------- ---- -- --
----- ---- - ----------------- ------

------------------ -- - ----- -------- ---- -- -

-- ----
----- ---- - ----------------- ----- - ------- --------- -------- ----------- ----------- ---

------------------ -- - ----- -------- ---- --- ------- --------- -------- ----------- ----------- -

来源:JavaScript中文网 ,转载请注明来源 本文地址:https://www.javascriptcn.com/post/65d8afbe1886fbafa4668925