面试重点:深拷贝和浅拷贝?(1重点,2—3要点)
-
总结
基本数据类型
赋值的是 存储的数据
赋值之后 两个变量没有关系
引用数据类型
浅拷贝
直接赋值 赋值的是 内存地址
赋值之后 两个变量使用的相同内容,一个操作,另一个也会改变
深拷贝
循环遍历,获取引用数据类型中,存储的每一个数据信息
赋值到新的变量中
赋值之后 两个变量,没有任何关系
- 区别
浅复制:值类型是直接赋值,而引用类型只是指针的改变
深复制:值类型是直接赋值,而引用类型是直接的复制
- 深复制和浅复制的方法?
浅复制在ES6中,obj.assign(target,obj1,obj2)
深复制在ES5中,JSON.parse(JSON.stringify(obj))
在jQuery中,$.extend(true,target,obj1,obj2)如果第一个参数传递true的情况下,则实现的是深复制
- 自己如何实现深复制
循环遍历,判断值类型。
如果值为null 或者type of !== “object” 直接return返回
如果是数组和对象,进行递归处理,递归处理注意出口,不要进入死循环,直到值类型,然后进行返回赋值
- 缺点
深复制在ES5中,JSON.parse(JSON.stringify(obj))参数如果为undefined、函数、正则表达式、promise对象、无法进行深拷贝
解决办法:第一种:lodash插件库:_.clone(value)浅复制 _.cloneDeep(value)深复制
第二种:jquery.extend()
- 深复制应用场景
在Vue中数据丢失的时候。第一种:$set() 第二种:深拷贝
后续还会更新,有关面试重点的题,希望可以帮助大家,我们一起学习一起进步,嘿嘿。