JS这门语言没有提供深拷贝的内建方法,诸如
slice, concat, Object.assign
这些方法其实都是对象的浅拷贝,修改深层次引用时就会变更原始数据,这在一些必须使用深拷贝的场景是无法接受的,所以如何实现一个有用又靠谱的深拷贝方法变得至关重要。
如果不想搞得太复杂,可以直接使用这个懒汉大法:
JSON.parse(JSON.stringify(target))
它的思路很简单,先序列化再反序列化,得到一个全新的对象。而事实上,在只包含原始数据类型和对象的数据结构中,这种大法是完全可用的。它的主要问题在于:
无法保证复制后的同一性
无法处理循环引用