生活服务
js深拷贝和先拷贝的实现方法:
2024-12-26 19:01  浏览:111

数据分为基本数据类型(string,number,boolean,null,undefined,symbol)和引用数据类型(object类型,有:object,array,data,regexp,function)

1.基本数据类型:直接存储在(stack的数据

2.引用数据类型:存储在该对象在栈中引用,真实的数据存放在内存里

具体呢?引用数据类型在栈中存储的是指针,然后让指针指向堆中该实体的地址。从而获取我们的实际的数据

浅拷贝只复制指向对象的指针,而不复制对象的本身,新旧对象还是共享同一块内存。

深拷贝会另外的创建一个一摸一样的对象,新对象和旧对象不共享内存,修改新对象不会改到源对象

浅拷贝就是只赋值数据(对象)本身,而不复制其内容(引用数据的内容,最终两个数组中指向同一套数据。

深拷贝则是既赋值本身也赋值内容

js中对于引用类型的数据,默认都是浅拷贝

object.assign我们经常会用到合并对象,当然利用object.assign性质我们也可以实现对象的拷贝

var obj1 = {a: 1, b: 2}

var obj2 = Object.assign({}, obj1)

obj2.a = 4

console.log(obj1, obj2)

 注意的是Object.assign第一个参数必须是个空对象

var obj1 = { a:1 , b:2 }

var obj2 = { ...obj1 }

obj2.a = 4;

js深拷贝和先拷贝的实现方法:

console.log(obj1,obj2)

 但这两种拷贝有一个问题就是只能赋值一层,假设我们有如下数据结构

var obj1 = [{
name: '臧三',
childs: ['小明', '小芳']
}]

var obj2 = [...obj1]

obj2[0].childs = []

console.log(obj1, obj2)

obj1,obj2 的结果均变了,这并不是我们想要的结果,所以我们要用到深拷贝。

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

//第一个参数不传(false是不能够显示的写出来的)默认为false,是浅拷贝。传true为深拷贝。
$.extend(true,object1, object2)

//newObject 即为深拷贝出来的对象
var newObject = $.extend(true , {} , object);

注意
这种简单粗暴的方法有其局限性,当值为undefined、function、symbol 会在转换过程中被忽略

利用数组的 slice 方法或者 concat 方法

 var arr1 = ["aaa","bbb","ccc"];
var arr2 = arr1.slice(0);
arr2[0] = "ddd";

 var arr1 = ["aaa","bbb","ccc"];
var arr2 = arr1.concat();
arr2[0] = "ddd";

    以上就是本篇文章【js深拷贝和先拷贝的实现方法:】的全部内容了,欢迎阅览 ! 文章地址:http://ww.kub2b.com/tnews/1759.html
     栏目首页      相关文章      动态      同类文章      热门文章      网站地图      返回首页 企库往资讯移动站 http://ww.kub2b.com/mobile/ , 查看更多   
最新文章
电信怎么设置呼叫转移功能,座机怎么设置呼叫转移功能oppo手机怎么设置呼叫转移「电信怎么设置呼叫转移功能,座机怎么设置呼叫转移功能」
最佳答案1.我们拨通10000,然后再按照语音提示接通人工服务; 2.然后我们再让客服来开通呼叫转移这个功能,还有其他两个选项,但
把强大的chrome浏览器安装到手机上,并支持电脑版的各种扩展CRX插件chrome手机版「把强大的chrome浏览器安装到手机上,并支持电脑版的各种扩展CRX插件」
发现了一款强大的手机版chrome浏览器,这个绝对不是应用市场里面的那个chrome,应用市场里的chrome不够强大,而且无法安卓扩展插
红警大作战尤里的复仇红警复仇手机版「红警大作战尤里的复仇」
红警大作战尤里的复仇是一款经典游戏的延续之作,经典的游戏红色警戒相信大家都玩过,这款游戏是在经典的基础上加以进化,让玩家
超千亿元回购增持再贷款!A500ETF今日低开高走,实时成交额突破9000万元
消息面上,自去年10月18日股票回购增持再贷款政策工具正式设立至今已半年,上市公司和主要股东积极响应。据Wind资讯数据统计,截
折叠手机铰链耐久度对决!三星超越摩托罗拉,OPPO表现引人瞩目摩托罗拉折叠手机「折叠手机铰链耐久度对决!三星超越摩托罗拉,OPPO表现引人瞩目」
前几日,有外网博主进行了一项“利好消费者但很无聊”的实验,就是直播两款折叠手机的铰链耐用度,型号分别是对三星Galaxy Z Fli
金饰价格最高突破1000元/克!上海金ETF(518600)开盘延续涨势,已连续12日获资金布局,冲击5连涨
【国际金价续创历史新高,金饰价格突破1000元/克】消息面上,受国际金价继续上涨影响,国内各金饰品牌挂牌价格也随之攀升至历史
手机拍摄屏幕时条纹的问题与解决:揭秘摩尔纹现象及拍摄技巧手机拍电脑屏幕有条纹怎么解决「手机拍摄屏幕时条纹的问题与解决:揭秘摩尔纹现象及拍摄技巧」
在现代智能手机普及的今天,拍摄屏幕内容已经成为许多用户日常生活中的一部分。然而,在这一过程中,时常会出现一现象:拍摄的照
“全球新一代豪华中大型电混轿车”推动“豪华平权”
4月10日,“全球新一代豪华中大型电混轿车”星耀8启动预售。新车推出搭载雷神EM-P超级电混和雷神EM-i超级电混的双动力版本,共计
苹果手机应用宝在哪里苹果手机下载应用宝「苹果手机应用宝在哪里」
对于许多苹果手机用户来说,应用宝这款应用商店并不陌生。作为腾讯旗下的手机应用商店,应用宝以其丰富的应用资源和便捷的下载方
倒班排班助手排班软件手机版「倒班排班助手」
倒班排班助手app方便用户的工作管理非常的适合哪些工作需要轮班的人员,一键的设置非常的便捷,自定义班次,还可以便捷的进行备