以下内容若有问题烦请即时告知我予以修改,以免误导更多人。
🐣以小见大
- 引用类型导致的问题
- 数组倒置需拷贝至新数组才能不影响原数组
- ES6 数组浅拷贝
- 深拷贝实现
- 元素的类型判断
- (1)递归拷贝
- (2)树的广度优先遍历
- (3)JSON解析反解析
- 应用:vue 父子组件传递数据深拷贝
引用类型导致的问题
1 | var arrA = [1,2,3,4]; |
数组倒置需拷贝至新数组才能不影响原数组
- 数组
1 | var arrA = [1,2,3,4]; |
- 对象
1 | var obj = [ |
slice可看作浅拷贝,因为如果obj有引用类型的元素,slice仅仅是复制了元素的地址。
- 如果obj所有值都是非引用类型,那么obj.slice(0)与深浅拷贝没有差别;
- 如果obj有引用类型的元素的话,obj.slice(0)仅仅是复制了元素的地址,obj.slice(0)可看作浅拷贝。
ES6 数组浅拷贝
1 | const arrA = [1,2,3,4]; |
深拷贝实现
元素的类型判断
1 | function getType(obj){ |
(1)递归拷贝
1 | function deepClone(data){ |
(2)树的广度优先遍历
1 | //这里为了阅读方便,只深拷贝对象,关于数组的判断参照上面的例子 |
(3)JSON解析反解析
深拷贝对象还有另一个解决方法,在对象中不含有函数的时候,使用JSON解析反解析就可以得到一个深拷贝对象
JSON.parse(JSON.stringify(obj))
1 | var obj = [ |
应用:vue 父子组件传递数据深拷贝
场景:父组件props向子组件传递数据,若为引用类型(数组or对象),子组件改变该数据时会影响父组件数据,不想改变时可以深拷贝该数据再做操作。
1 | computed: { |
更多内容可以订阅本人微信公众号,一起开启前端小白进阶的世界!