为了账号安全,请及时绑定邮箱和手机立即绑定

深拷贝和slice(0)有什么区别

深拷贝和slice(0)有什么区别

宝慕林4294392 2018-12-12 18:15:34
var array = listenerArray.slice(0); 和深拷贝有什么区别呢?还有Object.assign() 请做一个区分吧
查看完整描述

1 回答

?
临摹微笑

TA贡献1982条经验 获得超2个赞

1.拷贝是指得到被拷贝对象的副本,副本的修改不会影响到原对象

2.js的传参是按值传递,但是对于引用类型,传递的值是原对象在内存中的地址,所以拷贝仅仅是获取了原对象的引用

3.在2的基础上,对拷贝进行修改,原对象也会被修改

4.要想避免3的情况出现,就不能仅仅拷贝地址,而是要将原对象的属性树遍历复制到拷贝上,这样拷贝和原对象就是完全独立的了

5.4的情况叫深拷贝,与之相对,2的情况叫浅拷贝

6.如果所有值都是非引用类型,那么深浅拷贝没有差别

7.所以对于你的问题,slice可看作浅拷贝,因为如果listenerArray有引用类型的元素的话,slice仅仅是复制了元素的地址,而深拷贝是复制了整个元素


查看完整回答
反对 回复 2019-01-27
  • 1 回答
  • 0 关注
  • 986 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信