浅拷贝和深拷贝

2024-01-18 21:26:18 浏览数 (1)

浅拷贝

浅拷贝只是拷贝一层,更深层次对象级别的只拷贝引用; 它只拷贝内存地址,只要有一个对象改变了,另外一个对象也会跟着改变。

1.利用for循环遍历赋值

代码语言:javascript复制
 var obj = {
     name:'dample',
     msg:{
      age:22
     }
    }
var a ={}
for(var k in obj){
 //k是属性名
  a[k] = obj[k]
}

console.log(a);//20
a.age = 20;
console.log(obj);//20

2.ES6新增方法Object.assign()

代码语言:javascript复制
 var obj = {
     name:'dample',
     msg:{
      age:22
     }
    }
var a ={}
Object.assign(a,obj);
console.log(a);//20
a.msg.age = 20;
console.log(obj);//20
深拷贝

深拷贝拷贝多层,每一级别的数据都会拷贝。

代码语言:javascript复制
 var obj = {
      name:'dample',
      msg:{
        age:22
      },
      color:['pink','red']
    };
  var a = {};
 //封装函数,还利用了递归的方法
  function deepCopy(newObj,oldObj){
    for(var k in oldObj){
      //1.获取属性值oldObj[k]
      var item = oldObj[k];
      //2.判断这个值是否是数组
      if(item instanceof Array){
        newObj[k] = [];
        deepCopy(newObj[k],item)
      }else if(item instanceof Object){
      //3.判断这个值是否是对象
        newObj[k] = {};
        deepCopy(newObj[k],item)
      }else{
      //4.属于简单数据类型
        newObj[k] =item;
      }
    }
  }
   deepCopy(a,obj)
   console.log(a);
   a.msg.age = 20;
   console.log(obj);

打印结果如图所示:

0 人点赞