首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >JavaScript 中的浅拷贝和深拷贝

JavaScript 中的浅拷贝和深拷贝

原创
作者头像
泽霖
发布2023-11-12 14:36:11
发布2023-11-12 14:36:11
27800
代码可运行
举报
文章被收录于专栏:分享技术分享技术
运行总次数:0
代码可运行

作为 JavaScript 开发者,了解浅拷贝和深拷贝的区别是非常重要的概念。

首先,让我们讨论一下 JavaScript 中的对象是如何工作的。

对象是一种动态数据类型,可以包含键值对的集合,其中每个键对应一个属性,每个值表示属性关联的数据。

对象可以包含各种数据类型,包括数字、字符串、布尔值、数组、其他对象,甚至是函数。

浅拷贝:

浅拷贝是指拷贝的对象与源对象共享相同的引用。简单来说,这两个对象指向内存中的相同地址。因此,当你更改源对象或拷贝时,可能会导致另一个对象也发生变化。

代码语言:javascript
代码运行次数:0
运行
复制
const sourceObj = { name: "Jane", surname: "Doe" }
const copyObj = sourceObj

copyObj.name = "Joe"

console.log(sourceObj) // {name: "Joe", surname: "Doe"}

深拷贝:

相反,深拷贝是指拷贝的对象与源对象不共享相同的引用。因此,源对象的所有属性都将存在于拷贝对象中,但新对象将指向内存中的不同地址。这样,在修改时,两个对象是相互独立的。在 JavaScript 中,我们可以使用 JSON.parse()JSON.stringify() 方法实现深拷贝。

代码语言:javascript
代码运行次数:0
运行
复制
const sourceObj = { name: "Jane", surname: "Doe" }
const copyObj = JSON.parse(JSON.stringify(sourceObj))

copyObj.name = "Joe"

console.log(sourceObj) // {name: "Jane", surname: "Doe"}
console.log(copyObj) // {name: "Joe", surname: "Doe"}

需要注意的是,使用 JSON.parse()JSON.stringify() 进行深拷贝的方法对于包含函数或特殊对象(如 Date)的更复杂对象可能存在一些限制,因此在处理更复杂的数据结构时,开发者通常会使用像 Lodash 这样的专门库或自定义函数来实现深拷贝。

额外注意事项:

  1. 不可变性: 浅拷贝和深拷贝通常与不可变性的概念相关联。不可变性有助于在处理数据结构时避免意外的副作用,因为直接修改对象或数组可能导致意外行为。
  2. 性能考虑: 深拷贝,特别是使用 JSON.parse()JSON.stringify() 进行深拷贝,在处理大型和复杂对象时可能不如浅拷贝高效。在这种情况下,开发者可能会在性能和深拷贝需求之间进行谨慎平衡。

我正在参与2023腾讯技术创作特训营第三期有奖征文,组队打卡瓜分大奖!

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档