本题是通过@郝晨光 的文章受到的启发,学习来的,大家有兴趣可以看一下,而且我觉得这种写法非常通俗易懂,工作中也足够去使用了。
function DeepClone(target){ let result //1、先判断当前是否为对象 if(typeof target === 'object'){ //2、判断当前是否为数组,如果是,设置result为数组,并且循环递归 push赋值 if(Array.isArray(target)){ result = [] for (const key in target) { result = DeepClone(target[key]) } //3、判断当前是否为null,如果是直接赋值 }else if(target === null){ result = null //4、判断当前是否为RegExp,如果是直接赋值 }else if(target.constructor === RegExp){ result = target }else{ // 5、普通对象直接循环,递归 result = {} for (const i in target) { result[i] = DeepClone(target[i]) } } }else{ //如果不是对象类型直接赋值 result = target } return result } let obj1 = { a: { c: /a/, d: undefined, b: null }, b: function () { console.log(this.a) }, c: [ { a: 'c', b: /b/, c: undefined }, 'a', 3 ] } let obj2 = DeepClone(obj1); obj1.a.c = /b/ console.log(obj1) console.log(obj2)
标签:obj1,target,js,DeepClone,else,result,简单,拷贝,null From: https://www.cnblogs.com/chengxiang123/p/17191661.html