美文网首页
对象的浅拷贝与深拷贝的简单理解

对象的浅拷贝与深拷贝的简单理解

作者: usopp酱 | 来源:发表于2018-05-01 13:51 被阅读0次
    var oldObj = {
        name: 'xxx',
        sex: 'male',
        age: 3,
        friend: {
            name: 'hello', 
            age: 100
        }
    }

假设要克隆oldObj,做一个新的oldObj,里面内容一样,但和oldObj不是同一个,是新的oldObj,这就是拷贝。

  • 浅拷贝:只遍历一层,克隆name、sex、age、friend,但friend里面对象与新的friend里面对象指向同一个地址。(或者在js的基本类型和引用类型里面,如var a =1,浅拷贝只是单纯的对值的复制,对引用类型拷贝只是地址的复制,指向是同一个地方。)


    浅拷贝.jpg
  1. 实现浅拷贝的方式


    function shallowCopy(oldObj) {
        var newObj = {};
        for(var i in oldObj) {
            if(oldObj.hasOwnProperty(i)) {
                newObj[i] = oldObj[i];
            }
        }
        return newObj;
    }

  • 深拷贝:就是不管里面多少层,都遍历,克隆一个与旧不相关的,修改新的不影响旧的。
  1. 第一种方法:深拷贝(对象里面有数组和对象的情况下)

var o={
  name:'xiaogu',
  age:5,
  sex:'male',
  value:[1,2,3]
};

function deepCopy(oldObj,newObj){
  var newObj=newObj||{};
  for(var key in oldObj){
    if(typeof oldObj[key]==='object'){
      if(oldObj[key].constructor  === Array){
        //这是数组
        newObj[key]=[];
      }else{
        //这是对象
        newObj[key]={};
      }
      deepCopy(oldObj[key],newObj[key]);
       
    }else{
      newObj[key]=oldObj[key];
    }
  }
  return newObj;
}

var n=deepCopy(o,n);
console.log(n);

  1. 第二种方法:JOSN的方法实现深拷贝(无论什么情况)
   var result=JSON.parse(JSON.stringify(oldObj))

相关文章

  • 深浅拷贝,面向对象,Symbol,Set,Map

    一:浅拷贝与深拷贝对象的浅拷贝:浅拷贝是对象共用的一个内存地址,对象的变化相互影响。对象的深拷贝:简单理解深拷贝是...

  • 认识js下的浅拷贝与深拷贝

    浅拷贝与深拷贝 首先深拷贝和浅拷贝只针对像 Object, Array 这样的复杂对象的。简单来说,浅拷贝只拷贝一...

  • iOS 简单理解---浅拷贝,深拷贝

    浅拷贝,深拷贝。 1、个人简单理解就是: 浅拷贝没有创建新对象,深拷贝创建新的对象 从输出结果可以看出:1:不管是...

  • iOS 深浅拷贝

    iOS深拷贝与浅拷贝的区别 深拷贝与浅拷贝的概念:(我的理解,望不吝赐教) 浅拷贝:只copy一份对象的指针,指向...

  • python中的拷贝

    Python中的拷贝分为两种,浅拷贝与深拷贝 浅拷贝:浅拷贝是对于一个对象的顶层拷贝。通俗的理解是:拷贝了引用,并...

  • IOS开发之深拷贝与浅拷贝

    拷贝的方式有两种:浅拷贝和深拷贝。 从字面意思理解,浅拷贝,只是拷贝了对象的指针,而不是拷贝对象本身。 深拷贝,是...

  • 前端笔记(二) 对象的深浅拷贝,函数的防抖与节流,函数柯里化 ,

    对象的深浅拷贝 对象的深拷贝与浅拷贝的区别: 浅拷贝:仅仅复制对象的引用, 而不是对象本身。 深拷贝:把复制的对象...

  • 拷贝

    .深拷贝 深拷贝是对于一个对象所有层次的拷贝(递归) .浅拷贝 浅拷贝是对一个对象的顶层拷贝通俗的理解就是:拷贝了...

  • JAVA设计模式:原型模式与拷贝

    深拷贝与浅拷贝 浅拷贝:对象A进行赋值操作得到对象B,这就是浅拷贝,修改对象A的属性会影响到B的属性 深拷贝:深拷...

  • iOS - copy与mutableCopy

    浅拷贝与深拷贝 浅拷贝:指针拷贝,不产生新的对象,源对象的引用计数器+1 深拷贝:对象拷贝,会产生新的对象,源对象...

网友评论

      本文标题:对象的浅拷贝与深拷贝的简单理解

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