浅拷贝与深拷贝
function extendCopy(p){ var c={}; for(var i in p){ c[i]=p[i]; } c.uber=p; return c; }
c[i]=p[i],当对象类型的属性被拷贝时,实际上拷贝的知识该对象在内存中的位置指针。这一过程就是所谓的浅拷贝,这种情况下,如果我们修改了拷贝对象,就等同于修改了原对象。而深拷贝则可以帮助我们避免这方面的问题。
function deepCopy(p,c){ var c = c || {}; for(var i in p){ if(typeof p[i] === 'object'){ c[i] = (p[i].constructor===Array)?[]:{}; deepCopy(p[i],c[i]); }else{ c[i]=p[i]; } }
return c; }
现在我们来创建一个包含数组和子对象属性的对象:
var parent = { numbers:[1,2,3], letters:['a','b','c'], obj:{prop:1}, bool:true };
下面,我们分别用深拷贝和浅拷贝测试一下,就会发现深拷贝与浅拷贝不同。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步