ES6 深拷贝_浅拷贝与深拷贝以及实现方式

240a737035657dbd68fc067c90d2c80f.png

深拷贝与浅拷贝的区别

1.浅拷贝

浅拷贝将原对象或原数组的引用直接赋给新对象,新数组,新对象/数组只是原对象的一个引用(拷贝后的引用都是指向同一个对象的实例,彼此之间的操作会互相影响

953d8de41bd1262ba1a974e2338398b1.png

2.深拷贝

深拷贝是将原对象的各个属性的“值”逐个复制出去,而且将原对象各个属性所包含的对象也依次采用深拷贝的方法递归复制到新对象上(注意拷贝的“值”而不是“引用”)

fe8da69736217b41a738b52624e85c0f.png

3.什么时候使用深拷贝

我们在希望改变新的数组(对象)的时候,不改变原数组(对象)

4.使用深拷贝的注意事项

如果对象比较大,层级也比较多,深拷贝会带来性能上的问题。所以在遇到需要使用深拷贝,考虑有没有其他的方案,实际应用中主要还是以浅拷贝为主

5.浅拷贝的实现方式

方式一 自定义函数
var 
方式二 ES6 Object.assign() // 多层是浅拷贝 一层是深拷贝
var 
方式三 ES6 扩展运算符
var 
方式四 jQuery.extend()
var 
方式五 数组方法(只适用于类数组对象) Array.from()
var 
  • Array.concat()
  • Array.slice()

上面数组方法也可以实现浅拷贝,在这就不一一举例了

7.深拷贝的实现方式

方法一 用 JSON.stringify 把对象转换成字符串,再用 JSON.parse 把字符串转换成新的对象。可以转成 JSON 格式的对象才能使用这种方法,如果对象中包含 function 就不能用这种方法了。
var 
方式二 jQuery.extend()
var 
方式三 函数递归调用
var 
方式四 Object.assign()
var 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值