注意:对象是储存是引用地址,而对象里面的对象也是引用地址,对象里面的值是基本类型则
不需要
深拷贝也是一样。
1, 如果拷贝的对象里的元素只有值,没有引用,那浅拷贝和深拷贝没有差别,都会将原有对象复制一份,产生一个新对象,对新对象里的值进行修改不会影响原有对象,新对象和原对象完全分离开。 2, 如果拷贝的对象里的元素包含引用(像一个列表里储存着另一个列表,存的就是另一个列表的引用),那浅拷贝和深拷贝是不同的,浅拷贝虽然将原有对象复制一份,但是依然保存的是引用,所以对新对象里的引用里的值进行修改,依然会改变原对象里的列表的值,新对象和原对象完全分离开并没有完全分离开。而深拷贝则不同,它会将原对象里的引用也新创建一个,即新建一个列表,然后放的是新列表的引用,这样就可以将新对象和原对象完全分离开。
深拷贝方法: 1,JSON.stringify()&&JSON.parse(),这种方法适用很多情况,但如果对象里面包含undefined,函数,则会被删掉。
2,
function clone(obj){
let cpObj =typeof obj === 'object'?obj instanceof Array?[]:{}:obj;
if(obj&&typeof obj === 'object'){
for(let i in obj){
cpObj[i] = clone(obj[i])
}
}
return cpObj
}