浅拷贝与深拷贝的几种方式

浅拷贝

一、直接赋值

将旧对象的变量名直接赋值给新的对象变量,那么旧对象的属性值一改变,新对象也会改,因为只拷贝了内存地址

二、调用Object.assign()

该方法第一个参数是新对象,第二个参数是旧对象,旧对象中的属性值如果也是对象,那么新对象只是拷贝了内存地址

const obj = {};
const source = {
  name: 'nordon',
  info: {
    age: 18
  }
};
 
Object.assign(obj, source);
console.log(obj); // {name: 'nordon', info: {…}}
复制代码

三、...对象扩展运算符

运用扩展运算符将旧对象在一个新的空对象中展开,如果旧对象中的属性值是对象,那么新对象也是浅拷贝而已

 四、for循环遍历对象,将旧对象的属性值依次赋值给新对象,如果旧对象中属性值是一个对象,也只是浅拷贝

 

 深拷贝

一、通过递归的方式实现深拷贝

 

 

 二、使用Json.stringify和Json.parse

用Json.stringify()把对象转换成字符串,再用Json.parse把字符串转换成新的对象

//通过js的内置对象JSON来进行数组对象的深拷贝
function deepClone2(obj) {
  var _obj = JSON.stringify(obj),
    objClone = JSON.parse(_obj);
  return objClone;
}

三、使用函数库lodash的_.cloneDeep()

var _ = require('lodash')

var obj = {
  a: {
    c: 2,
    d: [9, 8, 7]
  },
  b: 4
}

var obj1 = _.cloneDeep(obj)

console.log(obj === obj1);//false

四、通过JQuery的extend方法实现深拷贝

let $ = require('jquery');
let obj1 = {
   a: 1,
   b: {
     f: {
       g: 1
     }
   },
   c: [1, 2, 3]
};
let obj2 = $.extend(true, {}, obj1);

m0_72647857
关注 关注
  • 0
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
彻底理解克隆、深拷贝浅拷贝(俩种方法
编程爱好者
09-01 5466
之前在学Javase时没注意到克隆这个方法,后面再网上看博客和面试题是经常看到克隆、深拷贝浅拷贝这些词语,刚开始看被吓一跳,以为有多复杂,今天下决心给他搞明白,突然发现原来这么简单,给以后的自己一个警醒,往往认为难的其实也没什么,一定要克服心理关。 首先理解克隆: 我们正常复制一个引用类型的数据时,会直接用赋值符号进行赋值,而这种赋值方法其实俩者共用的还是同一个对象,通过其中一个来改变对象中...
如何实现一个深浅拷贝
从人到猿
10-19 3781
把深浅拷贝单独作为一讲来专门讲解,是因为在 JavaScript 的编程中经常需要对数据进行复制,什么时候用深拷贝、什么时候用浅拷贝,是开发过程中需要思考的;同时深浅拷贝也是前端面试中比较高频的题目。 因此,深入学习这部分知识有助于提高手写 JS 的能力,以及对一些边界特殊情况的深入思考能力,这一讲会结合最基础但是又容易写不好的的题目来帮助提升。
深拷贝浅拷贝的实现方法和区别
最新发布
前端工作学习中
01-12 1817
浅拷贝的实现方法和区别总结
浅谈深拷贝 内附超好用的深拷贝方法
jinse29的博客
08-15 511
浅拷贝:创建一个新对象,这个对象有着原始对象属性值的一份精确拷贝。如果属性是基本类型,拷贝的就是基本类型的值,如果属性是引用类型,拷贝的就是内存地址 ,所以如果其中一个对象改变了这个地址,就会影响到另一个对象。 深拷贝: 将一个对象从内存中完整的拷贝一份出来,从堆内存中开辟一个新的区域存放新对象,且修改新对象不会影响原对象。...
浅拷贝实现方式
qq_72243342的博客
10-28 167
浅拷贝实现方式
浅拷贝几种方法
qq_41893686的博客
03-04 579
深拷贝 方法一:递归 let user={ name:"咳咳", person:{ age:12 }, data:[] } function copy(object) { let obj = object instanceof Array ? [] : {}; for (const [k, v] of Object.entries(object)) { d
数组的深拷贝浅拷贝以及数组拷贝的几种方式比较
12-22
目录一、深拷贝浅拷贝解析浅拷贝深拷贝二、数组拷贝的方式1.for循环来拷贝2.System.arraycopy( )拷贝3.Arrays.copyOf( )拷贝4.clone( )拷贝5.解释三、四种拷贝方式效率比较1. System.arraycopy( )2.Arrays.copyOf...
Python 拷贝对象(深拷贝deepcopy与浅拷贝copy)
12-24
import copya = [1, 2, 3, 4, [‘a’, ‘b’]] #原始对象b = a #赋值,传对象的引用c = copy.copy(a) #对象拷贝,浅拷贝d = copy.deepcopy(a) #对象拷贝,深拷贝a.append(5) #修改对象aa[4]....
Python中的赋值、浅拷贝深拷贝介绍
12-24
和很多语言一样,Python中也分为简单赋值、浅拷贝深拷贝几种“拷贝”方式。 在学习过程中,一开始对浅拷贝理解很模糊。不过经过一系列的实验后,我发现对这三者的概念有了进一步的了解。 一、赋值 赋值算是这三...
js代码-几种实现浅拷贝深拷贝 方法
07-16
js代码-几种实现浅拷贝深拷贝 方法
浅拷贝 多级深拷贝方法
peijiajing的博客
07-29 217
就是假设B复制了A,当修改A时,看B是否会发生变化 深拷贝:如果B没变,那就是深拷贝,自食其力,修成正果 浅拷贝:如果B也跟着变了,说明这是浅拷贝,功力不够 一级深拷贝方法: (1)slice()不带任何参数,默认返回一个长度和原数组相同的新数组 (2)concat()不带任何参数,把返回数组和一个空数组合并后返回,即返回一个长度和原数组相同的新数组 (3)直接遍历,添加到空数组 (4)ES...
深拷贝+浅拷贝,及深拷贝几种实现方式
beibei_niao的博客
03-09 3744
------深拷贝 :拷贝对象的具体内容,内存地址是自主分配的,拷贝结束后两个对象虽然存的值一样,但是内存地址不一样 ------浅拷贝 :对内存地址的复制,让目标对象指针和源对象指向同一片内存空间。注意:当内存销毁的时候,指向对象的指针 ,必须重新定义,才能够使用(浅拷贝是一个传址,也就是把a的值赋给b的时候同时也把a的址赋给了b, 当b(a)的值改变的时候,a(b)的值同时也会改变) --...
我自己常用的几个JS深浅拷贝方法
扫地僧
04-14 353
案例代码 let obj = [ { name: 'robin', age: 24, num: [ { sleep: '8', eat: 'chicked', happy: [1,2,3] } ] } ] 深拷贝 JSON let newObj = JSON.parse(JSON.stringify(obj)) jQue...
深拷贝浅拷贝的区别?如何实现它们?
weixin_46886227的博客
03-28 299
浅拷贝 指的是创建一个新数据,这个数据有着与原始数据的一份精确拷贝,如果原始数据是基本类型的数据,那么拷贝出来的数据就是原始数据的值,如果原始数据为引用数据类型的值,那么,拷贝的就是原始数据的内存地址,也就是说,浅拷贝只会拷贝一层数据,其他的引用数据类型的值,只会拷贝其内存地址,也就是会共享一个堆数据 实现: function shallowClone(obj) { if(typeof obj == "object" && obj != null) { con
如何实现数组的浅拷贝深拷贝
cjwjyooo的博客
05-16 1万+
1.    背景介绍javascript分原始类型与引用类型。Array是引用类型,直接用“=”号赋值的话,只是把源数组的地址(或叫指针)赋值给目的数组,并没有实现数组的数据的拷贝。这种方式的实现属于浅拷贝深拷贝是开辟新的储存空间,两个对象对应两个不同的地址,修改一个对象的属性,不会改变另一个对象的属性。2.    知识剖析一维数组深拷贝slice和concat方法1.  slice()slic...
python3中浅拷贝深拷贝的实现方式、区别
jimmy_gyn的博客
01-22 3792
python3浅拷贝深拷贝的实现方式、区别: list1 = [1,2,3] list2 = list1 list1[0] = 0 print(list2) print(list1) 打印的结果: [0, 2, 3] [0, 2, 3] 小结: 通过把一个列表变量名赋值给另一个变量名,只是把一个列表变量名list1的指引赋值给另一个变量名list2,使list1和list
JS深浅拷贝实现
weixin_34249678的博客
04-04 303
引用赋值与浅拷贝的区别 引用赋值是地址的赋值,将对象指针赋值给一个变量,让此变量指向对象。 浅拷贝只会将对象的各个属性进行依次复制,并不会进行递归复制。 var obj = { a:1, arr: [2,3] }; var obj1 = {}; var shallowObj = {}; var deepObj = {}; //引用赋值,obj1指向obj所指向的对象 var obj1 = o...
JS中的深浅拷贝以及实现深拷贝几种方法.
weixin_33834910的博客
09-11 524
什么是浅拷贝?从基本类型和栈内存以及堆内存讲起. 我们在js中最常用的赋值方式就是浅拷贝.如: 两个对象a,b. 那么 让b等于a. var b = a; 这就是最基本的浅拷贝了.那浅拷贝的表现形式是什么呢? 解决这个问题我们要先谈谈js中的数据类型了. 在es5中有6中数据类型它们是:undefined,null,Boolean,Stirng,Number,Object. 在es6中新增一个...
浅谈深拷贝浅拷贝(js)
热门推荐
GuoZebin的博客
10-05 2万+
如何区分深拷贝浅拷贝?简单点来说,就是假设B复制了A,当修改A时,看B是否会发生变化,如果B也跟着变了,说明是浅拷贝,如果B没变,那就是深拷贝。深入点来说,就是B复制了A,如果B复制的是A的引用,那就是浅拷贝,如果B复制的是A的本体,那就是深拷贝。在深入了解深拷贝浅拷贝之前,我们先得了解堆栈和数据类型。 一.堆栈和数据类型 在js中,数据类型分为两种,基本类型和引用类型。基本类型指的是简单...
列举浅拷贝深拷贝的实现方式
07-14
浅拷贝深拷贝的实现方式可以通过以下几种方式进行: 1. 浅拷贝的实现方式: - 切片操作:对于可切片的对象(如列表、元组、字符串),使用切片操作可以创建一个浅拷贝。 - copy()函数:Python中的内置copy()函数可以用于创建对象的浅拷贝。 - 使用copy模块:copy模块中的copy()函数也可以用于创建对象的浅拷贝。 2. 深拷贝的实现方式: - 使用copy模块:copy模块中的deepcopy()函数可以用于创建对象的深拷贝。它会递归地复制对象及其子对象。 - 使用pickle模块:pickle模块中的dump()和load()函数可以将对象序列化和反序列化,通过序列化和反序列化操作可以实现深拷贝。 需要注意的是,不同的实现方式适用于不同类型的对象,具体选择哪种方式取决于你所处理的对象类型和需求。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
写文章

热门文章

  • 浅拷贝与深拷贝的几种方式 2631
  • 什么是MVVM,与MVC的区别是什么 386
  • 关于类继承的一些操作例子 96
  • v-for循环中key的作用 94

大家在看

  • 民革中央许少辉《乡村振兴战略下传统村落文化旅游设计》提参政议辉少许
  • 蓝易云 - 有哪些值得推荐的服务器?
  • Telnet远程登录(Cisco)

最新文章

  • v-for循环中key的作用
  • 什么是MVVM,与MVC的区别是什么
  • 关于类继承的一些操作例子
2022年4篇

目录

目录

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值

深圳SEO优化公司同乐百度网站优化排名平湖网站开发坂田SEO按天扣费爱联网站搭建吉祥SEO按天收费观澜SEO按天计费东莞网站开发福永关键词按天计费大芬企业网站设计民治至尊标王横岗seo坂田设计网站坪山百度竞价横岗网站推广系统罗湖优秀网站设计深圳关键词按天计费南山网站优化按天计费木棉湾SEO按效果付费爱联外贸网站制作吉祥网站排名优化观澜网站优化爱联营销网站福永模板网站建设深圳网站改版罗湖网站优化软件南澳百度网站优化松岗seo优化大运网络广告推广盐田网站排名优化布吉网站推广系统歼20紧急升空逼退外机英媒称团队夜以继日筹划王妃复出草木蔓发 春山在望成都发生巨响 当地回应60岁老人炒菠菜未焯水致肾病恶化男子涉嫌走私被判11年却一天牢没坐劳斯莱斯右转逼停直行车网传落水者说“没让你救”系谣言广东通报13岁男孩性侵女童不予立案贵州小伙回应在美国卖三蹦子火了淀粉肠小王子日销售额涨超10倍有个姐真把千机伞做出来了近3万元金手镯仅含足金十克呼北高速交通事故已致14人死亡杨洋拄拐现身医院国产伟哥去年销售近13亿男子给前妻转账 现任妻子起诉要回新基金只募集到26元还是员工自购男孩疑遭霸凌 家长讨说法被踢出群充个话费竟沦为间接洗钱工具新的一天从800个哈欠开始单亲妈妈陷入热恋 14岁儿子报警#春分立蛋大挑战#中国投资客涌入日本东京买房两大学生合买彩票中奖一人不认账新加坡主帅:唯一目标击败中国队月嫂回应掌掴婴儿是在赶虫子19岁小伙救下5人后溺亡 多方发声清明节放假3天调休1天张家界的山上“长”满了韩国人?开封王婆为何火了主播靠辱骂母亲走红被批捕封号代拍被何赛飞拿着魔杖追着打阿根廷将发行1万与2万面值的纸币库克现身上海为江西彩礼“减负”的“试婚人”因自嘲式简历走红的教授更新简介殡仪馆花卉高于市场价3倍还重复用网友称在豆瓣酱里吃出老鼠头315晚会后胖东来又人满为患了网友建议重庆地铁不准乘客携带菜筐特朗普谈“凯特王妃P图照”罗斯否认插足凯特王妃婚姻青海通报栏杆断裂小学生跌落住进ICU恒大被罚41.75亿到底怎么缴湖南一县政协主席疑涉刑案被控制茶百道就改标签日期致歉王树国3次鞠躬告别西交大师生张立群任西安交通大学校长杨倩无缘巴黎奥运

深圳SEO优化公司 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化