美文网首页
Javascript深浅拷贝

Javascript深浅拷贝

作者: Addy_Zhou | 来源:发表于2017-02-23 19:16 被阅读17次

浅拷贝

1.基本数据类型 是存在栈中的,所以=赋值,都会创建一个新的空间,例如

var a = 4;
b = a;

变量b有自己独立的空间

2.对象数据类型 是存在堆中的,=赋值,并不会创建新的空间,只是引用,例如

var a={};
b=a;

变量b只是一个引用,指向了a的空间,这其实就是浅拷贝

深拷贝

  • 数组
    数组的slice和concat方法能把由基础数据组成的数据,拷贝出一个新对象
var arr=['a','b','c'];
var arrCopy=arr.slice(0);
var arrCopy2=arr.concat();
  • 对象
    下面实现一种对象深拷贝;
    另外Object.assgin也能深拷贝,但它不会递归遍历拷贝,只拷贝目标对象的属性,深层属性不拷贝;
    第三种可以使用json的特性来做深度拷贝;
1.Object.prototype.deepCopy=function(){
    var obj=null;//用于最后返回一个对象,这个对象是深复制的结果
    for(var attr in this) {//遍历这个对象的每一个属性
        if(this.hasOwnProperty(attr)){//主要是递归自有属性
            if(typeof (this[attr]==='object')){//如果对象的属性是一个对象,就递归复制它的每一个属性
                if(this[attr]===null){//如果对象为null
                    obj[attr]=null;
                }else if(Object.prototype.toString(this[attr])==='[object Array]'){//如果是个数组
                    obj[attr]=[];
                    for(var i=0;i<this[attr].length;i++){
                        obj[attr].push(this[attr][i].deepCopy());
                    }
                }else{//object
                    obj[attr]=this[attr].deepCopy();
                }
            }else{
                obj[attr]=this[attr];
            }
        }
    }
    return obj;
}

2.Object.assign(target, ...sources);

3.JSON.parse(JSON.stringify(target));

相关文章

  • javascript深浅拷贝

    Javascript有六种基本数据类型(也就是简单数据类型),它们分别是:Undefined,Null,Boole...

  • javascript深浅拷贝

    underscore 的源码中,有很多地方用到了 Array.prototype.slice() 方法,但是并没有...

  • JavaScript深浅拷贝

    简单讲呢,深浅拷贝,都是进行复制,那么区别主要在于复制出来的新对象和原来的对象是否会互相影响,改一个,另一个也会变...

  • Javascript深浅拷贝

    浅拷贝 1.基本数据类型 是存在栈中的,所以=赋值,都会创建一个新的空间,例如 变量b有自己独立的空间 2.对象数...

  • JavaScript深浅拷贝

    原文链接 http://blog.poetries.top/2018/12/21/js-deep-copy/ 关注...

  • Javascript深浅拷贝

    拷贝 复制与拷贝 复制:将一个对象a赋值给另一个变量b,这个只是存储了对象a的引用地址,是属于同一个对象 克隆:创...

  • JavaScript深浅拷贝

    一般来说,我们拷贝数据的时候:如果是基本数据类型,则会生成新的数据,修改拷贝后的数据不会影响原有数据。如果是对象/...

  • JavaScript 深浅拷贝

    深拷贝: 深拷贝即创建新的内存地址保存值(互不影响)浅拷贝: 共用同一内存地址,你改变我也跟着变 总结:slice...

  • javascript深浅拷贝讲解

    最近写一个项目用到了深浅拷贝,为了更深入的了解,又查了一些资料,找到了司徒正美大神的一个讲解,非常好,这里分享一下...

  • JavaScript 对象深浅拷贝

    浅拷贝: 深拷贝:

网友评论

      本文标题:Javascript深浅拷贝

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