首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >浅拷贝和深拷贝

浅拷贝和深拷贝

作者头像
程序媛夏天
发布于 2024-01-18 21:26:18
发布于 2024-01-18 21:26:18
6390
举报
浅拷贝

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

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);

打印结果如图所示:

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2024-01-18,如有侵权请联系 cloudcommunity@tencent.com 删除
目录
  • 浅拷贝
  • 深拷贝
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档