JavaScript深度克隆(递归)
今天在深度理解JQuery源码时,剖析extend时:
jQuery.extend = jQuery.fn.extend = function() { //... }
感觉该方法的一部分功能与深度克隆类似,恰好深度克隆的代码还没整理上传;
借此机会先上传一份深度克隆的代码;
代码若有不足之处,希望各位看官评论提示,一起学习进步。
// 遍历对象 for(var prop in obj) // 1.判断是不是原始值 typeOf() object // 2.判断是数组还是对象 instanceof toString constructor // 3.建立相应的数组或对象 //递归 function deepClone(origin, target){ var target = target || {}, toStr = Object.prototype.toString, arrStr = "[object Array]"; objStr = "[object Object]"; for(var prop in origin){ //object.hasOwnProperty(attribute)判断attribute是不是自己本身的属性(即不拷贝原型链上的属性) if(origin.hasOwnProperty(prop)){ if(origin[prop] !== null && typeof(origin[prop]) == 'object'){ //origin[prop]调用toString方法的返回值是[object Array],target则赋值[],即为数组 if(toStr.call(origin[prop]) == arrStr){ target[prop] = toStr.call(target[prop]) == arrStr ? target[prop] : [] ; }else{ target[prop] = toStr.call(target[prop]) == objStr ? target[prop] : {}; } //遇到引用值,应用递归实现深度克隆 deepClone(origin[prop],target[prop]); }else{ target[prop] = origin[prop]; } } } return target; }
简单的内容,测试代码很糙,有强迫症小哥哥小姐姐自己写一份吧,嘻嘻
var obj = { name : "abc", age : 123, card : ['visa','master'], wife : { name : "bcd", son : { name : "aaa" } }
} var obj1 = {}
deepClone(obj,obj1);
——生命自会找到蓬勃之路。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律