欢迎您访问 最编程 本站为您分享编程语言代码,编程技术文章!
您现在的位置是: 首页

JavaScript里的对象复制:深入理解深拷贝

最编程 2024-02-15 07:29:35
...

在JavaScript中,深拷贝说起来有点麻烦,因为里面情况会很比较复杂。

相比于浅拷贝深拷贝要求要完整地拷贝下底层被引用地对象而不是仅粗略地要求拷贝下引用中对象的地址。正如之前所说通俗一点理解看:

  • 仅用"="将对象引用的赋值给变量时,仅传递了引用的对象地址;
  • 通过“浅拷贝”返回对象时,相当于对源对象最外层的所有可枚举属性进行了“=”操作后获得的新对象;
  • 通过“深拷贝”返回对象时,相当于任意一层不再简单传递引用的对象的内存地址,而是真正意义上拷贝下来每一层对象。

但是很快你就会发现,如果在一个对象中引用的对象到某层由存在循环性的引用,往往会导致一个死循环。

另外,在JavaScript中的函数也是对象,我们在JS中不能确定对一个函数进行“深拷贝”是什么,尽管由很多框架给出了自己的定义。

一种比较好方法是通过JSON序列化来实现深拷贝:

var obj_b = JSON.parse(JSON.stringify(obj_a))

这种方法也不是万能的,它要求对象必须是JSON安全的,即:

不仅obj_a可以被序列化为一个JSON格式的字符串,同时还可以由该字符串解析得到一个结构完全相同的对象。