js 深拷贝的实现
在深拷贝递归的时候需要考虑循环应用,可以通过判断一个对象的字段有没有引用这个对象或者任意父级来实现。
var testObject = { 'name': ‘John', 'age': 24, 'testArray': [3, 2, 4, 5], 'testObject': { 'attr1': 'value1', 'attr2': 321, 'attr3': [1, 2, 3] } } // 测试循环引用 testObject['testCircularReference'] = testObject function deepClone(source, parentObject) { if (!parentObject) { parentObject = [] } if (typeof source !== 'object') { return source } if (parentObject.indexOf(source) >= 0) { throw new Error('circular reference') } else { parentObject.push(source) } var targetObject = source.constructor === Array ? [] : {} for (var key in source) { if (source.hasOwnProperty(key)) { if (typeof source[key] !== 'object') { targetObject[key] = source[key] } else { targetObject[key] = deepClone(source[key], parentObject) } } } return targetObject } var newObject = deepClone(testObject) console.log(newObject.testObject === testObject.testObject)
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步