
JS 浅拷贝与深拷贝
发布日期:2021-05-14 09:31:49
浏览次数:16
分类:博客文章
本文共 775 字,大约阅读时间需要 2 分钟。
JS 浅拷贝与深拷贝
最近的一个Vue项目中,遇到了一个修改新对象的属性值时,原对象的属性值也跟着改变了的问题。然后思考 JS 中是否有着类似 Java 的引用地址传递的思想,查了下在 JS 中的称呼为深拷贝。在此区分下浅拷贝与深拷贝的概念。
博客参考文章:
1、浅拷贝
浅拷贝针对基本数据类型,number, string, boolean, null, undefined, ES6的 symbol 以及ES10的 BigInt 七类,B复制了A,B的数值改变,不会影响到A。
a.基本类型--名值存储在栈内存中,例如let a=1;
当b=a复制时,栈内存会新开辟一个内存:
实现方式
直接用 = 赋值
var a = 1;var b = a;console.log(a,b); //1,1b = 2;console.log(a,b); //1,2
2、深拷贝
浅拷贝针对引用数据类型,object, array, function等,B复制了A,B的数值改变,A的数值也跟着改变。
b.引用数据类型--名存在栈内存中,值存在于堆内存中,但是栈内存会提供一个引用的地址指向堆内存中的值,我们以上面浅拷贝的例子画个图:
当b=a进行拷贝时,其实复制的是a的引用地址,而并非堆里面的值。
而当我们a[0]=1时进行数组修改时,由于a与b指向的是同一个地址,所以自然b也受了影响,这就是所谓的深拷贝了。
实现方式
我这里直接采用JSON.stringify与JSON.parse实现深拷贝
function deepClone(a) { var b = JSON.stringify(a), objClone = JSON.parse(b); return objClone;}
一般用此方法足矣,若想深拷贝对象里面的方法,请使用其他方式。
发表评论
最新留言
逛到本站,mark一下
[***.202.152.39]2025年04月16日 11时49分53秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
flume使用中的一些常见错误解决办法 (地址已经使用)
2019-03-07
andriod 开发错误记录
2019-03-07
C语言编译错误列表
2019-03-07
看明白这两种情况,才敢说自己懂跨链! | 喵懂区块链24期
2019-03-07
张一鸣:创业7年,我经历的5件事
2019-03-07
SQL基础语法
2019-03-07
git拉取远程指定分支代码
2019-03-07
《web安全入门》(四)前端开发基础Javascript
2019-03-07
python中列表 元组 字典 集合的区别
2019-03-07
python struct 官方文档
2019-03-07
Android DEX加固方案与原理
2019-03-07
Android Retrofit2.0 上传单张图片和多张图片
2019-03-07
iOS_Runtime3_动态添加方法
2019-03-07
Leetcode第557题---翻转字符串中的单词
2019-03-07
Problem G. The Stones Game【取石子博弈 & 思维】
2019-03-07
Unable to execute dex: Multiple dex files
2019-03-07
Java多线程
2019-03-07
Unity监听日记
2019-03-07