四、js的深浅拷贝(2021/4/24)
发布日期:2021-05-07 05:40:56 浏览次数:9 分类:原创文章

本文共 980 字,大约阅读时间需要 3 分钟。

var obj = {   }; //obj变量保存在栈里面,而对象{   }存储在堆里面

1.浅拷贝赋值的区别

  • 当我们把一个对象赋值给一个新的变量时,赋的其实是该对象的在栈中的地址,而不是堆中的数据。也就是两个对象指向的是同一个存储空间,无论哪个对象发生改变,其实都是改变的存储空间的内容,因此,两个对象是联动的。
  • 浅拷贝:重新在堆中创建内存,拷贝前后对象的基本数据类型互不影响,但拷贝前后对象的引用类型因共享同一块内存,会相互影响。
  • 深拷贝:从堆内存中开辟一个新的区域存放新对象,对对象中的子对象进行递归拷贝,拷贝前后的两个对象互不影响。

深拷贝写法:

var person = {           name:'你好',        hobby:['学习',['可爱','活泼'],'向上'],        date : new RegExp('\\w+'),        function(){   }}function deepClone(obj){           var cloneObj = new obj.constructor();        if(obj == null) return obj;        if(obj instanceof Date) return new Date(obj);        if(obj instanceof RegExp) return new RegExp(obj);        if(typeof obj !== 'object') return obj;        for(var i in obj){                   if(obj.hasOwnProperty(i)){                           cloneObj[i] = deepClone(obj[i])                }        }        return cloneObj}var person1 = deepClone(person);console.log(person1);

浅拷贝的实现方式:

Object.assign()...concatlodash clone

深拷贝实现方式:

$.extenddeepClone
上一篇:五、防抖函数(2021/4/24)
下一篇:三、箭头函数this指向(2021/4/23)

发表评论

最新留言

关注你微信了!
[***.104.42.241]2025年03月20日 02时33分35秒