ThinkChat2.0新版上线,更智能更精彩,支持会话、画图、阅读、搜索等,送10W Token,即刻开启你的AI之旅 广告
[TOC] >[success] # 对深拷贝的认知总结 ~~~ 基本类型的数据不需要深拷贝,比如'字符串、number、布尔值'都是直接赋值即可达到深拷贝的效果 ~~~ <br/> >[success] ## 基本类型数据拷贝写法 ~~~ var obj = { a: 1, b: 2 } var obj2 = { a: obj.a, b: obj.b } obj.a = 3 obj.a // 3 obj2.a // 1 ~~~ <br/> >[danger] ## 错误写法 ~~~ var obj = { a: 1, b: 2 } var obj2 = obj obj.a = 3 obj.a // 3 obj2.a // 3 还有一种情况也是深拷贝不成功的,如下: var obj = { a: 1, b: [1, 2, 3] } var obj2 = {} for(var key in obj){ obj2[key] = obj[key] } 这种情况obj.b是深拷贝不到的,如果修改了obj.b中的值obj2.b也会改变的 ~~~ <br/> >[success] ## 数组的深拷贝 说白了就是一个数组的值push到另一个数组中即可 ~~~ var arr = [1, 2, 3, 4, 5, 6] var arr2 = [] this.arr.forEach( item => { arr2.push(item) }) 或者一个简单的写法: arr2.push(...arr) ~~~ <br/> >[success] ## 对象的深拷贝 ~~~ var obj = { name: '小明',age: '10岁' } var obj2 = {} for(var key in obj){ obj2[key] = obj[key] } ~~~ <br/> >[success] ## 数据中变量值为null时如何处理? 有时我的数据中格式是这样的: ~~~ let arr = [ { a: null }, { a: { b: '哈哈' } } ] const deepCopy = (p, c) => { var c = c || {}; for (var i in p) { if (typeof p[i] === 'object' && p[i] !== null) { // 判断类型为object并且不等于null c[i] = (p[i].constructor === Array) ? [] : {}; deepCopy(p[i], c[i]); } else { c[i] = p[i]; } } return c; } 在执行deepcopy时会报错因为,'null'是一个'空对象的指针',所以需要做一下判断加了一句'p[i] !== null'就可以了 ~~~