深浅拷贝区别

深度拷贝

(1): 手工打造回调函数
(2):JSON.parse(JSON.stringify(obj))
可见对拷贝对象进行改变不会影响原对象,原理就是用JSON.stringify将对象转成JSON字符串,再用JSON.parse()把字符串解析成对象,一去一来,新的对象产生了,而且对象会开辟新的栈,实现深拷贝。
这种方式的缺点是当对象里面有函数的话,深拷贝后,函数会消失
(3):手写递归函数实现深拷贝
递归方法实现深度克隆原理:遍历对象、数组直到里边都是基本数据类型,然后再去复制,就是深度拷贝

·浅拷贝:

浅拷贝是按位拷贝对象,它会创建一个新对象,这个对象有着原对象属性值的一份精准拷贝,如果属性是基本类型,拷贝的就是基本类型的值;如果属性是内存地址(引用类型),拷贝的就是内存地址 ,因此如果其中一个对象改变了这个地址,就会影响到另一个对象。即默认拷贝构造函数只是对对象进行浅拷贝复制(逐个成员依次拷贝),即只复制对象空间而不复制资源。
实现方法:
(1):循环遍历并复制 for in
(2):Object.assign()
Object.assign()方法可以把任意多个的源对象自身的可枚举属性拷贝给目标对象,然后返回目标对象。
原对象属性中包含引用类型:进行了浅拷贝,拷贝了原对象属性值,所以拷贝的对象改变的时候原对象的引用类型也改变
(3):Array.prototype.slice()
var arr= [‘jack’,25,{hobby:‘tennise’}];
let arr1 = arr.slice()
arr1[2].hobby=‘rose’
arr1[0]=‘rose’
console.log(’ arr[2].hobby’) //rose
console.log( arr[0]) //jack
(4):Array.prototype.concat()
var arr = [‘jack’,25,{hobby:‘tennise’}];
let arr1 = arr.concat()
arr1[2].hobby=‘rose’
arr1[0]=‘rose’
console.log( arr[2].hobby) //rose
console.log( arr[0]) // jack

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值