
四、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
发表评论
最新留言
关注你微信了!
[***.104.42.241]2025年03月20日 02时33分35秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
【55】Kotlin android Anko 神兵利器2
2019-03-04
Xcode10 Multiple commands produce
2019-03-04
html 选择文件显示文件名称
2019-03-04
python PIL 压缩图片
2019-03-04
解决Android中WebView跳转到浏览器的问题
2019-03-04
git忽略规则以及.gitignore文件不生效解决办法
2019-03-04
android 读取raw 文本内容 kotlin版本
2019-03-04
文件md5怎么会变化
2019-03-04
php 获取apk版本号
2019-03-04
tablayout 滑动监听
2019-03-04
ViewModel LiveData 使用初体验
2019-03-04
Error connecting to the service protoco
2019-03-04
windows 用户获取管理员权限
2019-03-04
Flutter 加载本地图片
2019-03-04
android带气泡的第三方选项卡
2019-03-04
好玩的editText
2019-03-04
Material Design之RippleDrawable详解
2019-03-04
自动安装服务2
2019-03-04
edittext弹出键盘或者隐藏键盘
2019-03-04