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

var array = listenerArray.slice(0); 和深拷贝有什么区别呢?
还有Object.assign() 请做一个区分吧

宝慕林4294392
浏览 987回答 1
1回答

临摹微笑

1.拷贝是指得到被拷贝对象的副本,副本的修改不会影响到原对象2.js的传参是按值传递,但是对于引用类型,传递的值是原对象在内存中的地址,所以拷贝仅仅是获取了原对象的引用3.在2的基础上,对拷贝进行修改,原对象也会被修改4.要想避免3的情况出现,就不能仅仅拷贝地址,而是要将原对象的属性树遍历复制到拷贝上,这样拷贝和原对象就是完全独立的了5.4的情况叫深拷贝,与之相对,2的情况叫浅拷贝6.如果所有值都是非引用类型,那么深浅拷贝没有差别7.所以对于你的问题,slice可看作浅拷贝,因为如果listenerArray有引用类型的元素的话,slice仅仅是复制了元素的地址,而深拷贝是复制了整个元素
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript