JavaScript 中的浅拷贝和深拷贝2025 年 1 月 7 日 | 阅读 3 分钟 在 JavaScript 中,有两种复制对象的方式:浅拷贝 和 深拷贝。理解这两种复制方式的区别在很多编程场景中都很重要,因为它们各有优缺点。 浅拷贝浅拷贝 是一种只复制一层深度的拷贝。换句话说,它复制对象及其所有属性,但任何嵌套的对象或数组仍然会引用与原始对象相同的内存位置。这意味着,如果你修改了嵌套对象,它也会影响原始对象以及被复制的对象。 以下是使用扩展运算符浅拷贝对象的示例: 在此示例中,originalObject 有一个嵌套对象 b,其中有一个属性 c。扩展运算符 ... 用于创建一个新对象 shallowCopy,它是 originalObject 的浅拷贝。这意味着如果我们修改 shallowCopy,它不会影响 originalObject。 如你所见,修改 shallowCopy 上的属性 a 的值不会影响 originalObject。然而,修改嵌套对象 b 上的属性 c 的值会同时影响 shallowCopy 和 originalObject。 这是因为 shallowCopy 和 originalObject 都引用了同一个嵌套对象 b。当我们修改 shallowCopy 上的 b 时,它会修改 originalObject 上的同一个对象。 深拷贝深拷贝 是一种创建新对象,并为所有属性和嵌套对象或数组创建新内存位置的拷贝。这意味着,如果你修改了被复制的对象或其任何嵌套对象或数组,它不会影响原始对象。 以下是使用 JSON.parse() 和 JSON.stringify() 方法深拷贝对象的示例: 在此示例中,我们使用 JSON.stringify() 将 originalObject 转换为 JSON 字符串,然后使用 JSON.parse() 将该字符串转换回新对象 deepCopy。这会创建一个 originalObject 的深拷贝。 现在,如果我们修改 deepCopy,它不会影响 originalObject: 如你所见,修改 deepCopy 上的属性 a 或嵌套对象 b 的值不会影响 originalObject。这是因为 deepCopy 和 originalObject 对它们的所有属性和嵌套对象都有单独的内存位置。 性能考虑需要注意的是,深拷贝在性能方面可能比浅拷贝更昂贵。这是因为创建新对象并复制其所有属性和嵌套对象可能比仅仅创建引用与原始对象相同内存位置的新对象花费更多的时间和内存。 在某些情况下,浅拷贝可能更有效和实用。然而,如果你需要确保修改被复制的对象不会影响原始对象,那么深拷贝是必需的。 结论在 JavaScript 中,有两种复制对象的方式:浅拷贝和深拷贝。浅拷贝创建一个新对象,它引用与原始对象相同的内存位置,而深拷贝创建一个新对象,并为其所有属性和嵌套对象或数组创建新的内存位置。 浅拷贝在性能方面可能更有效,但如果修改被复制的对象会影响原始对象,可能会导致意外行为。深拷贝确保修改被复制的对象不会影响原始对象,但可能在性能方面更昂贵。 虽然使用 JSON.parse() 和 JSON.stringify() 是创建对象深拷贝的简便方法,但它并非在所有情况下都有效。如果你需要创建对象的深拷贝,使用 JSON.parse() 和 JSON.stringify() 是一个简单的选择。但是,如果正在复制的对象包含函数或循环引用,则可能需要一个递归的深拷贝函数。 |
JavaScript 中素数的介绍 素数是大于 1 的整数,除了 1 和它本身之外没有其他除数。因此,如果一个素数除以任何小于它本身的整数,它永远不会产生整数。一个常见的练习...
5 分钟阅读
?什么是库?在 JavaScript 中,库是预先编写的代码,用于简化复杂任务和重复使用代码的过程。换句话说,通过使用 JavaScript 库,开发者可以实现某些功能。简单来说,JavaScript...
阅读 4 分钟
现代 JavaScript 最好的地方之一就是多样性。有数百个 JavaScript 项目解决了 99% 的用户使用的少数项目中的明显空白。此外,许多其他 JavaScript 项目解决了只有它们的...
7 分钟阅读
JavaScript 是一种灵活、强大的编程语言,软件开发人员和网页设计师都可以使用。它有数千种应用,可用于开发各种 Web 应用程序和网站,甚至移动应用程序。本文将探讨添加多个类的各种方法...
阅读 6 分钟
setInterval 和 clearInterval 是 JavaScript 的基本组成部分,用于管理需要定期或延迟执行的操作以及控制执行流程。setInterval 和 setTimeout 函数提供了这些功能,使程序员能够编写代码...
阅读9分钟
{X, Y} 量词包含并匹配 x 到 y 范围内的数字。正则表达式量词在数字字符串上操作,使用正则表达式的搜索、匹配、测试和 exec 方法。我们可以将量词用于可用的字符。语法 To...
阅读 4 分钟
能够如此快速地执行货币转换将是一项非常有用的技能,尤其对于开发全球化网站或应用程序的开发人员来说。除了 JavaScript 之外,还有其他选择。然而,JavaScript 是开发...的一个很好的选择。
阅读 6 分钟
什么是? CoffeeScript 是一种编译为 JavaScript 的小型语言。CoffeeScript 提供了简单易学的语法,避免了 JavaScript 复杂的语法。简单来说,它是一种编译为 JavaScript 的编程语言。它旨在提高 JavaScript 的可读性并减少其冗余度,通过……
阅读 6 分钟
JavaScript includes() JavaScript includes() 方法用于检查给定字符串中是否存在指定的子字符串。它是一个区分大小写的方法。它返回布尔值,true 或 false。如果字符串包含指定的子字符串,则返回 true,否则...
阅读 2 分钟
方法 trim() 是 JavaScript 中内置的字符串函数,用于修剪字符串。此函数从字符串的两端(即开头和结尾)删除空格。由于 trim() 是一个字符串方法,因此可以通过...调用它。
7 分钟阅读
我们请求您订阅我们的新闻通讯以获取最新更新。
我们提供所有技术(如 Java 教程、Android、Java 框架)的教程和面试问题
G-13, 2nd Floor, Sec-3, Noida, UP, 201301, India