博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
深拷贝和浅拷贝
阅读量:6680 次
发布时间:2019-06-25

本文共 1366 字,大约阅读时间需要 4 分钟。

首先,对于深拷贝和浅拷贝了解一波

let obj3 = {}let obj1={      name:'grace',      car:{        brand:'小黄车',        price: 200      }};//通过for in 遍历对象,拷贝了数据存到obj3中    for(var k in obj1){       obj3[k] = obj1[k]    }//obj3修改car中的price属性的值 obj3.car.price = '1'console.log(obj1) console.log(obj3)

上述代码执行后,会发现obj1和obj3中的car.price都被修改成1了,此时就涉及到了深拷贝

浅拷贝和深拷贝的理解

浅拷贝:只会拷贝一层,如果全是简单类型的属性,不会有问题,但如果存在复杂数据类型,其实际拷贝的是内存地址,这样存在问题,此时我们就需要深拷贝

 

实现深拷贝的方法

1.递归函数

function deepCopy(obj) {      let newObj = {}      for (var k in obj) {        newObj[k] = typeof obj[k] === 'object' ? deepCopy(obj[k]) : obj[k]      }      return newObj    }let obj1 = {      name: 'grace',      car: {        brand: '小黄车',        price: 200      }    }let  obj2 = deepCopy(obj1)obj2.car.price = 10console.log(obj1)console.log(obj2)

 

2.JSON.parse和JSON.stringify方法

let obj1={      name:'grace',      car:{        brand:'小黄车',        price: 200      }}    let obj2 = JSON.parse(JSON.stringify(obj1))//此时修改了obj2中的数据    obj2.car.price = '400'    console.log(obj1)    console.log(obj2)

最终打印结果就会发现只有obj2中的数据发生变化

3.jquery中的$.extend方法

//$.extend(deep,target,obj)      let  obj4 = {}    let obj1={      name:'grace',      car:{        brand:'小黄车',        price: 200      }}$.extend(true,obj4,obj1)obj4.car.brand = 'bike'console.log(obj1)console.log(obj4)

最终结果是只有obj4中的car.brand变成了bike

转载于:https://www.cnblogs.com/z-lin/p/11131588.html

你可能感兴趣的文章
Intent跳转时,activity的生命周期
查看>>
Java基础数据结构和堆栈
查看>>
我的友情链接
查看>>
我的友情链接
查看>>
ubuntu建立和删除用户
查看>>
Html5本地图片读取及裁剪
查看>>
MySQL数据库操作个人手记
查看>>
我的友情链接
查看>>
泡沫学员CSS切图学习总结
查看>>
centos 学习日记 文件隐藏属性 chattr lsattr
查看>>
redhat yum 失败
查看>>
log4j2日志框架使用简单概述
查看>>
新手处理事故之误删boot目录以及更严重的删除操作
查看>>
bootstap-table 只显示列名和表格不显示数据
查看>>
linux 网站架设调优Apache(四)
查看>>
vi的使用
查看>>
当你需要处理XML文档时
查看>>
【Python之旅】第五篇(一):Python Socket通信原理
查看>>
pycharm 5注册
查看>>
java-buildpack源码分析之Release
查看>>