一、理解
三者的区别如下,不过比较的前提都是针对引用类型:
浅拷贝:
对一个对象进行浅拷贝,重新在堆中创建内存,该对象下的基本类型属性会开辟新的空间;引用类型属性是还是指向同一块空间,会相互影响
深拷贝:
从堆内存中开辟一个新的区域存放新对象,对对象中的子对象进行递归拷贝,拷贝前后的两个对象互不影响
赋值:
把一个对象赋值给一个新的变量时,赋的其实是该对象的在栈中的地址,而不是堆中的数据。也就是两个对象指向的是同一个存储空间,因此,两个对象是联动的。
二、实现
1.浅拷贝
代码如下:
//浅拷贝
let shallowClone = function(obj){
let newobj = {
};
for(let key in obj){
//查找一个对象是否有某个属性,但是不会去查找它的原型链
if(obj.hasOwnProperty(key)){
newobj[key] = obj[key];
}
}
return newobj;
}
let obj = {
a:"1",
b:2,
c:[3,7],
dog:{
name:"doudou",
age:1
}
}
let s1