浅拷贝:
只针对当前对象的属性进行拷贝,若当前对象的属性是引用类型时,这个不考虑,不进行拷贝。
若属性是引用类型,拷贝后引用的是地址,如果进行更改,会影响拷贝的原对象属性。
1 2 3 4 5 | var newObj = {} for ( var key in obj) { //key是当前属性名, obj[key]是当前属性值 newObj[key] = obj[key] } |
深拷贝:
针对当前对象的数据的所有引用结构都拷贝一份,数据在内存中是独立的。
若属性是引用类型,如果进行更改,不会影响拷贝的原对象属性。
js使用扩展方法实现深拷贝
Object.prototype.DeepCopy = function () { // 1, 创建一个对象 var temp = {}; // 2, 拷贝属性, 判断如果是引用类型需要深拷贝 for (var k in this) { if (typeof this[k] === 'object') { temp[k] = this[k].DeepCopy(); } else { temp[k] = this[k]; } } // 3, 返回对象 return temp; };
测试:
var arr = [{ name: "j1" }, { name: "j2" }, { name: "j3" }]; var arrtoo = arr.DeepCopy(); arrtoo[1].name = "cccc"; alert(arr[1].name); alert(arrtoo[1].name);
结果:j2 cccc
扩展方法:http://www.cnblogs.com/kissdodog/p/3386480.html
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】