复杂/引用数据类型的深浅拷贝

Posted haoyd

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了复杂/引用数据类型的深浅拷贝相关的知识,希望对你有一定的参考价值。

举例说明:

 

直接将一个引用数据类型的地址,赋值给另一个变量存储的,称为浅拷贝

//浅拷贝

  var   arr1 = [ 1 , 2 , 3 , 4 ];

  var   arr2 = arr1;

  arr1[0] = "hello";

  console,log(arr2);//这时我们得到数据是[ "hello" , 2 , 3 ,4 ]

  由于我们的变量存储的是数组的内存地址,我们将arr1赋值给arr2实际上是将数组的内存地址赋值给了arr2,就是说这两个变量所对应的数据是同一个而不是说这两个变量存储的数据是一样的,

  然后我们使用变量arr1对数组进行的数据修改,最后我们输出arr2时,相应的数据也被修改了。

 

只复制 引用数据类型中的 数值 而不是 复制地址,称为深拷贝

//深拷贝

  var   arr1 = [ 1 , 2 , 3 , 4 ];

  var   arr2 =  [ ];

  所以我们可以将arr1中的数据提取出来放进一个新的数组里面
   for(var i = 0 ; i <= arr1.length-1 ; i++){
            arr2.push ( arr1 [ i ] );
        }
  然后我们修改arr1的数据:
  arr1[ 0 ] = "hello";
 
  然后我们输出数据:
  console.log(arr1);//这个数据是[ "hello" , 2 , 3 ,4 ]
  console.log(arr2);//这个数据是[ 1 , 2 , 3 , 4 ]
 
  这样两个数据之间就没有任何关系和联系,这样就完成了深拷贝。

  

以上是关于复杂/引用数据类型的深浅拷贝的主要内容,如果未能解决你的问题,请参考以下文章

js对象的深浅拷贝

深浅拷贝区别与应用

深浅拷贝区别与应用

深浅拷贝的解决方案

深浅拷贝

javascript的深浅拷贝