Object.assign

简介: Object.assign

简介: Object.assign
在JavaScript中,Object.assign() 是一个用于合并对象属性的常见方法。然而,对于许多开发者来说,关于它是否执行深拷贝的认识可能存在一些混淆。先说答案Object.assign() 不属于深拷贝,我们接着往下看。
Object.assign() 概览
首先,让我们回顾一下 Object.assign() 的基本用法。该方法用于将一个或多个源对象的属性复制到目标对象,并返回目标对象。这一过程是浅拷贝的,即对于嵌套对象或数组,只是拷贝了引用而非创建新的对象。
javascript复制代码const obj = { a: 1, b: { c: 2 } };
const obj2 = { d: 3 };

const mergedObj = Object.assign({}, obj, obj2);

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

浅拷贝的陷阱
浅拷贝的特性意味着如果源对象中包含对象或数组,那么它们的引用将被复制到新的对象中。这可能导致问题,尤其是在修改新对象时,原始对象也会受到影响。
javascript复制代码const obj = { a: 1, b: { c: 2 } };
const clonedObj = Object.assign({}, obj);
clonedObj.b.c = 3;

console.log(obj); // { a: 1, b: { c: 3 } }
console.log(clonedObj); // { a: 1, b: { c: 3 } }

在这个例子中,修改 clonedObj 的属性也会影响到原始对象 obj。
因此,如果我们需要创建一个全新且独立于原始对象的拷贝,我们就需要进行深拷贝。而 Object.assign() 并不提供深拷贝的功能。
深拷贝的需求
如果你需要进行深拷贝而不仅仅是浅拷贝,就需要使用其他的方法,如使用递归或第三方库来实现深度复制。以下是几种常见的深拷贝方法:

使用 JSON 序列化和反序列化
javascript复制代码const obj = { a: 1, b: { c: 2 } };
const deepClonedObj = JSON.parse(JSON.stringify(obj));
deepClonedObj.b.c = 3;
console.log(obj); // { a: 1, b: { c: 2 } }
console.log(deepClonedObj); // { a: 1, b: { c: 3 } }

这种方法利用了 JSON 的序列化和反序列化过程,通过将对象转换为字符串,然后再将字符串转换回对象,实现了一个全新的深拷贝对象。
需要注意的是,这种方法有一些限制,例如无法处理包含循环引用的对象,以及一些特殊对象(如 RegExp 对象)可能在序列化和反序列化过程中失去信息。

目录
相关文章
|
3月前
|
JavaScript 前端开发
Object.assign() - JavaScript
Object.assign() - JavaScript
|
6月前
|
JavaScript
js的Object.assign坑
js的Object.assign坑
29 0
|
9月前
Object.assign详解
Object.assign详解
168 0
|
9月前
|
前端开发 索引
Array.prototype.at
Array.prototype.at
51 0
|
10月前
|
Java 数据库连接 mybatis
@TableId(type = IdType.ASSIGN_ID)
@TableId(type = IdType.ASSIGN_ID)
115 1
|
前端开发
前端学习案例5-object.assign的应用
前端学习案例5-object.assign的应用
42 0
前端学习案例5-object.assign的应用
|
前端开发
前端学习案例4-object.assign的应用
前端学习案例4-object.assign的应用
56 0
前端学习案例4-object.assign的应用
|
前端开发
前端学习案例1-object.assign
前端学习案例1-object.assign
49 0
前端学习案例1-object.assign
|
前端开发
前端学习案例3-object.assign之3
前端学习案例3-object.assign之3
44 0
前端学习案例3-object.assign之3
|
前端开发
前端学习案例6-object.assign的应用
前端学习案例6-object.assign的应用
41 0
前端学习案例6-object.assign的应用