JavaScript中的浅拷贝与深拷贝

JavaScript中的浅拷贝与深拷贝

💡 原文英文,约400词,阅读约需2分钟。
📝

内容提要

在JavaScript中,复制对象和数组有浅拷贝和深拷贝两种方式。浅拷贝只复制第一层,嵌套对象共享引用,通常使用扩展运算符或Object.assign;深拷贝复制所有层,互不影响,常用JSON或structuredClone()。简单对象用浅拷贝,复杂对象用深拷贝。

🎯

关键要点

  • 在JavaScript中,复制对象和数组有浅拷贝和深拷贝两种方式。
  • 浅拷贝只复制第一层,嵌套对象共享引用。
  • 浅拷贝可以使用扩展运算符或Object.assign。
  • 深拷贝复制所有层,互不影响,常用JSON或structuredClone()。
  • 简单对象使用浅拷贝,复杂对象使用深拷贝。
  • 浅拷贝示例:const shallow1 = { ...original };
  • 深拷贝示例:const deep = JSON.parse(JSON.stringify(original));
  • 浅拷贝方法包括:const copy1 = { ...original }; 和 const copy2 = Object.assign({}, original);
  • 数组的浅拷贝可以使用const copy1 = [...originalArray]; 或 originalArray.slice();
  • 深拷贝方法包括使用JSON和structuredClone(),后者支持更多数据类型。
  • 使用Lodash库的cloneDeep方法也可以实现深拷贝。
  • 简单对象使用浅拷贝,复杂对象使用深拷贝以确保独立性。

延伸问答

JavaScript中的浅拷贝和深拷贝有什么区别?

浅拷贝只复制对象的第一层,嵌套对象共享引用;深拷贝复制所有层,互不影响。

如何在JavaScript中实现浅拷贝?

可以使用扩展运算符({ ...original })或Object.assign({}, original)来实现浅拷贝。

深拷贝的常用方法有哪些?

深拷贝可以使用JSON.parse(JSON.stringify(original))或structuredClone(),也可以使用Lodash库的cloneDeep方法。

在什么情况下应该使用浅拷贝?

当对象简单且没有嵌套对象时,使用浅拷贝即可。

深拷贝的优势是什么?

深拷贝提供了完全独立的副本,修改一个对象不会影响另一个对象。

使用JSON进行深拷贝有什么限制?

使用JSON进行深拷贝会移除函数、日期、undefined、Map、Set等数据类型。

➡️

继续阅读