美文网首页
JS中的深浅复制

JS中的深浅复制

作者: 李丹linda | 来源:发表于2018-07-01 15:56 被阅读0次

什么是深浅复制?

  • 深复制:把要复制的对象的所引用的全部对象都复制一遍。开辟新空间。
  • 浅复制:仅仅复制对象的引用,而不是对象本身。指向同一片空间。

了解数据类型:

  • 基本数据类型:简单的数据段。包括:Undefined、Null、Boolean、Number、String。
  • 引用数据类型:可能包含多个值的对象。包括:object、array、function、error、date。
    <script type="text/javascript">
        var a = 10;     //Number类型,基本数据类型
        var o = {       //object类型,引用数据类型
            name:"obj";
        }
    </script>
数据类型.png

深浅复制的实现

一、深拷贝的实现

1.数组深拷贝的实现

(1)使用for循环

    <script type="text/javascript">
        var arr1 = [1,2,3,4,5,6];
        var arr2 = [];
        for(var i=0;i<arr1.length;i++){
            arr2[i] = arr1[i];
        }
        arr2[1] = "a";
        console.log(arr1);      //1,2,3,4,5,6
        console.log(arr2);      //1,"a",3,4,5,6
    </script>

(2)使用slice()方法

    <script type="text/javascript">
        var arr1 = [1,2,3,4,5,6];
        var arr2 = [];
        arr2 = arr1.slice(0);
        arr2[1] = "a";
        console.log(arr1);      //1,2,3,4,5,6
        console.log(arr2);      //1,"a",3,4,5,6
    </script>

(3)使用concat()方法

    <script type="text/javascript">
        var arr1 = [1,2,3,4,5,6];
        var arr2 = [];
        arr2 = arr1.concat();
        arr2[1] = "a";
        console.log(arr1);      //1,2,3,4,5,6
        console.log(arr2);      //1,"a",3,4,5,6
    </script>
2.对象深拷贝的实现

(1)使用for循环

    <script type="text/javascript">
        var json1 = {
            "name":"John",
            "age" :18,
            "sex" :"male"
        };
        var json2 = {};
        
        for(var i in json1){
            json2[i] = json1[i];
        }
        json2["name"] = "a";
        console.log(json1);     //"name":"John","age" :18,"sex" :"male"
        console.log(json2);     //"name":"a","age" :18,"sex" :"male"
    </script>

(2)使用JSON实现

    <script type="text/javascript">
        var json1 = {
            "name":"John",
            "age" :18,
            "sex" :"male"
        };
        var json2 = {};
        
        json2 = JSON.parse(JSON.stringify(json1));
        json2["name"] = "a";
        console.log(json1);     //"name":"John","age" :18,"sex" :"male"
        console.log(json2);     //"name":"a","age" :18,"sex" :"male"
    </script>

(3)使用Object.create()的方法

    <script type="text/javascript">
        function Person(){
        }
        Person.prototype.name = "Tom";
        Person.prototype.age = 24;
        Person.prototype.job = "Teacher";
        
        function P(){};
        P.prototype = Object.create(Person.prototype);
        var p1 = new P();
        var p2 = new P();
        p1.name = "kity";
        console.log(p1.name);                   //Kity
        console.log(p2.name);                   //Tom
    </script>

(4)使用call()方法

    <script type="text/javascript">
        function Person(){
            this.name = "Tom";
            this.age = 24;
            this.job = "Teacher";
            this.friend = ["Jhon","lady"];
        }
        function P(){
            Person.call(this);
        };
        var p1 = new P();
        var p2 = new P();
        p1.friend.push("kity");
        console.log(p1.friend);                 //"Jhon","lady","kity"
        console.log(p2.friend);                 //"Jhon","lady"
    </script>

(5)使用jQuery.extend()的方法

    <script src="jquery.min.js"></script>
    <script type="text/javascript">
        var json1 = {
            "name":"John",
            "age" :18,
            "sex" :"male"
        };
        var json2 = {};
        $.extend(json2,json1)
        json2["name"] = "a";
        console.log(json1);     //"name":"John","age" :18,"sex" :"male"
        console.log(json2);     //"name":"a","age" :18,"sex" :"male"
    </script>

二、浅复制的实现

(1)简单的复制语句

    <script type="text/javascript">
        var arr1 =[10];
        var arr2 = arr1;
        arr2.push(20);
        console.log(arr1);    //10,20
        console.log(arr2);    //10,20
    </script>

(2)使用Object.assign()方法

    <script type="text/javascript">
        var obj1 ={
            a:{"name":"Jhon",
            "age" :18}
        };
        var obj2 = Object.assign({}, obj1);
        obj2.a.name = "a";
        console.log(obj1.a.name);       //"a"
        console.log(obj2.a.name);       //"a"
    </script>

相关文章

  • JS中的深浅复制

    什么是深浅复制? 深复制:把要复制的对象的所引用的全部对象都复制一遍。开辟新空间。 浅复制:仅仅复制对象的引用,而...

  • iOS中的深浅复制

    iOS中的深浅复制

  • js中对象的复制,浅复制(浅拷贝)和深复制(深拷贝)

    在js中,我们经常复制一个对象,复制数据,那么就会有人问了,怎么复制,今天鹏哥就带来js中的复制方法。 JS中对象...

  • JavaScript里的深浅拷贝

    由于js里的数据类型分为简单类型和引用类型,所以在引用类型的复制问题上出现了深浅复制的问题。深复制和浅复制只针对像...

  • JavaScript中的深浅复制

    什么是深浅复制 浅复制:浅复制就是复制一份引用,所有的引用对象都指向同一份数据,并且都可以修改这份数据. 深复制:...

  • JS中的深浅拷贝

    这几乎是前端面试的高频问题。 什么是深浅拷贝? 浅拷贝 把对象a的值赋值给b,再修改b.name的值, a.nam...

  • Python的复制(拷贝)问题

    深浅复制的讨论是基于可变类型的 浅复制 复制最外层容器,副本中的元素是源容器中元素的引用 列表浅复制包括...

  • “戏说”js中的深浅拷贝

    一、通俗解释,嘿嘿嘿 在做开发中,经常能遇到数组拷贝的操作。 初期我经常直接用“=”,但是发现,改副本的值,原始数...

  • 深浅复制

    深浅复制和属性为copy,strong值的变化问题 浅复制:只复制指向对象的指针,而不复制引用对象本身。对于浅复制...

  • 深浅复制

    Python中的对象之间赋值时是按引用传递的,如果需要拷贝对象,需要使用标准库中的copy模块。 copy.cop...

网友评论

      本文标题:JS中的深浅复制

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