您的位置:首页 > 其它

深拷贝与浅拷贝

2020-02-03 03:15 92 查看

 js中有两种数据类型:

     1.  基本类型  :  Number、String、Boolean、Null、Undefined 

     2.  复杂类型  :  Object 、Array

  深拷贝和浅拷贝只针对复杂类型的数据,因为基本类型数据的定义都会重新开辟新的内存。

  浅拷贝拷贝的是内存地址,只是增加一个指针指向已有的内存,这时多个数据共用一个内存空间;

  深拷贝是新增了指针并且新开辟了内存空间,新指针指向新的内存。

  浅拷贝:

        var a={
                  name:'WangJing',
                  sex:'女',
                  age:'25'
         };

         console.log(a.name);//'WangJing'
         var b = a ;
         b.name = '白子画';
         console.log(a.name); //白子画--浅拷贝:拷贝的是内存地址,指针指向同一个内存空间,修改其中一个其他也会改变

   修改对象b的属性值,对象a的属性值也会改变,这就是浅拷贝 (数组也是一样)

 

   深拷贝:

          var c = {}; //不要写 var c; 会报错
          function extend(a,b){
                for(var prop in a){
                          b[prop]=a[prop];
                 }
           }
           extend(a,c);
           c.name = "胡歌";
           console.log(a.name); //白子画--深拷贝:新建内存,新指针指向新的内存空间    修改其中一个不会影响另外的数据

 

 

以下代码可以解决深拷贝

function extend(a, b) {
for(var prop in a) {
//判断是否是基本数据类型
if(typeof a[prop] === "object") {
b[prop] = (a[prop].constructor === Array) ? [] : {};//对象和数组区别处理
extend(a[prop], b[prop]);
} else {
b[prop] = a[prop];
}
}
}

 

转载于:https://www.cnblogs.com/Jane--Blog/p/9141707.html

  • 点赞
  • 收藏
  • 分享
  • 文章举报
ditong3342 发布了0 篇原创文章 · 获赞 0 · 访问量 11 私信 关注
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: