为什么会出现深拷贝和浅拷贝:
首先谈一谈,js的数据类型,基本类型有:Number,String,null,undefined,boolean;引用类型有:Array,Object,Function;当基本类型赋值时,是直接增加了内存空间,相互独立了;但是当引用类型赋值或则复制时直接改变了指针方向,好比两个人有了同一间房子的钥匙,都指向了同一内存,所以是相互影响的。
举个简单的例子:1:
,b是没有变的。2:
,当变成引用类型时,a改变时b也随着改变了。这个赋值可以简单的理解为浅拷贝哈(我自己认为的),但是也可以使用深拷贝的方法使两个变量相互独立,互不影响。
深拷贝方案:
1,使用JSON.parse(JSON.stringify())的方式。但是这个会有缺陷:
- 不能复制function、正则、Symbol
- 循环引用报错
- 相同的引用会被重复复制
2,使用递归的方式实现深拷贝:
function deepCopy(source, target) {
for(var key in source){
var item = source[key];
if(item instanceof Object){
target[key] = {}; //新增一个空的对象来接受
deepCopy(item,target[key]); //递归调用方法
}else if(item instanceof Array){
target[key]=[];
deepCopy(item,target[key]);//递归调用方法
}else {
target[key] = source[key];//递归调用方法
}
}
}
var obj1 = {
name : '黄影影',
age : 18,
baba:{
name: 'lkk'
}
};
var obj2 = {};
deepCopy(obj1,obj2)

到这里可以实现深拷贝了。
本文深入探讨了JavaScript中深拷贝与浅拷贝的概念,解析了它们出现的原因,并通过实例展示了引用类型赋值的影响。同时,提供了两种深拷贝的实现方案:使用JSON方法和递归方式,对比了各自的优缺点。

1946

被折叠的 条评论
为什么被折叠?



