JavaScript之深拷贝,浅拷贝

JavaScript之深拷贝,浅拷贝

概念

简单来理解就是假设B复制了A,当修改A时,看B是否会发生变化,如果B也跟着变了,说明这是浅拷贝,如果B没变,那就是深拷贝。

深入理解浅拷贝

首先,举个例子,代码如下:

var a=[0,1,2,3,4,5],
b=a;
console.log(a===b);
a[0]=1;
console.log(a,b);

在这里插入图片描述
根据这个例子可以看出b复制了a的内容,b随着a的变化而变化,这就是浅拷贝。

深入理解深拷贝

通过堆栈存储更好理解深拷贝
首先建立一个数组a,分配的栈内存如下:
在这里插入图片描述
b对a进行复制,栈内存会新开辟一个内存:
在这里插入图片描述
当修改a的某个值时,对b并不会造成影响,虽然b不受a影响,但这也算不上深拷贝,因为深拷贝本身只针对较为复杂的object类型数据。
引用数据类型–名存在栈内存中,值存在于堆内存中,但是栈内存会提供一个引用的地址指向堆内存中的值
在这里插入图片描述
当b对a进行拷贝时,其实复制的是a的引用地址,并非不是堆里面的值。
在这里插入图片描述
当a数组进行修改时,由于a与b指向的是同一个地址,所以b也受了影响,这就是所谓的浅拷贝。
在这里插入图片描述
而要到达深拷贝,就要让b重新开辟一个堆内存
在这里插入图片描述
这就实现了深拷贝

发布了87 篇原创文章 · 获赞 198 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/low666/article/details/104863612
今日推荐