美文网首页
slice(0)和深拷贝区别

slice(0)和深拷贝区别

作者: Artifacts | 来源:发表于2019-08-22 00:00 被阅读0次
var obj = [
    {
        name:'js1',
        job:'111'
    },
    {
        name:'js2',
        job:'222'
    },
    {
        name:'js3',
        job:'333'
    }
];
var copy = obj.slice(0);
copy[1].name = 'tom';
console.log(obj[1].name); //tom
console.log(copy[1].name); //tom

结果是obj[1].name和copy[1].name都被修改了。slice可看作浅拷贝,因为如果obj有引用类型的元素,slice仅仅是复制了元素的地址

  1. 拷贝是指得到被拷贝对象的副本,副本的修改不会影响到原对象;
  1. js的传参是按值传递,但是对于引用类型,传递的值是原对象在内存中的地址,所以拷贝仅仅是获取了原对象的引用
  1. 在 (2) 的基础上,对拷贝进行修改,原对象也会被修改;
  1. 要想避免(3)的情况出现,就不能仅仅拷贝地址,而是要将原对象的属性树遍历复制到拷贝上,这样拷贝和原对象就是完全独立的了;
  1. (4)的情况叫深拷贝,与之相对, (2) 的情况叫浅拷贝;
  1. 如果obj所有值都是非引用类型,那么obj.slice(0)与深浅拷贝没有差别;
  1. 如果obj有引用类型的元素的话,obj.slice(0)仅仅是复制了元素的地址,obj.slice(0)可看作浅拷贝

相关文章

  • slice(0)和深拷贝区别

    结果是obj[1].name和copy[1].name都被修改了。slice可看作浅拷贝,因为如果obj有引用类型...

  • 深拷贝和浅拷贝

    干货!深拷贝和浅拷贝的区别 深拷贝才是拷贝,浅拷贝就是Retain Copy与Retain的区别 Copy: 根据...

  • copy和mutableCopy的区别

    copy和mutableCopy的区别 深拷贝和浅拷贝的区别 在OC中对象的拷贝方式有两种:深拷贝和浅拷贝.浅拷贝...

  • 2019基础面试题 !!!持续跟新中

    基础面试题: 1. copy 和 strong 的区别。 也就是 深拷贝和浅拷贝 的区别。 copy属于深拷贝 其...

  • python的浅拷贝和深拷贝

    对于不可变类型,浅拷贝和深拷贝没有区别 对于不可变类型 赋值 浅拷贝 深拷贝

  • 五、面试总结(五)

    对象 拷贝(clone) 如何实现对象克隆 深拷贝和浅拷贝区别 深拷贝和浅拷贝如何实现激活机制 写clone()方...

  • go和python的深浅拷贝理解

    go深拷贝, 就是拷贝值 go浅拷贝, 拷贝引用 go中赋值就能实现拷贝,针对引用类型(slice,map,cha...

  • iOS--拷贝相关题

    1、什么是深拷贝什么是浅拷贝?浅拷贝和深拷贝的区别 * 浅拷贝(shallow copy):指针拷贝,对于被拷贝对...

  • JavaScript的深拷贝和浅拷贝

    原文 博客原文 大纲 前言1、对深拷贝和浅拷贝的初步认识2、深拷贝和浅拷贝的区别3、浅拷贝存在的缺陷4、深拷贝的实...

  • 手写一个深拷贝

    深拷贝和浅拷贝的区别深拷贝和浅拷贝最根本的区别在于是否真正复制一个对象的实体,而不是引用。举个爪子,假如 同学A ...

网友评论

      本文标题:slice(0)和深拷贝区别

      本文链接:https://www.haomeiwen.com/subject/shtgsctx.html