拷贝

95 阅读1分钟

浅拷贝

var arr = [1];
      var copy_arr = arr;

      copy_arr.push("new string");
      arr.push("new string");

      console.log(arr);
      console.log(copy_arr);
  • 数据存放在内存中
  • 内存分为 栈 和堆
  • 拷贝执行在栈中完成的
  • 基本类型数据存放在栈中,引用类型数据存放在堆中
  • 变量在栈中,赋值为数据,或者指针
  • arr 存放的是数据在堆中的地址
  • copy_arr 拷贝地址
  • 所有arr cpoy_arr 指向同一个数据,所以是浅拷贝
  • 基本类型数据拷贝,是深拷贝

深拷贝

  • deepCopy_array 作用 深拷贝多层嵌套数组
  • 多层数据拷贝
  • 最外层数组,最后拷贝完毕
  • 最内层数组,最先拷贝完毕
var arr = [1, 2, [1, [1, 2, 3, [1, 2, 2, [1, 2, 20]]]], [1, 2, 2, 2]];
function deepCopy_array(array) {
        var res = [];
        for (var i = 0; i < array.length; i++) {
          // array[i] 可能是数组
          if (Array.isArray(array[i])) {
            // 递归 自己方法体内;调用自己
            var arr = deepCopy_array(array[i]);
            res.push(arr);
          } else {
            res.push(array[i]);
          }
        }
        return res;
      }

      var copy_arr = deepCopy_array(arr);
      copy_arr[2].push("111");
      copy_arr[2][1].push("11");
      console.log(arr, copy_arr);

对象深拷贝

var obj = {
            name:'aaa',
            age:123,
            obj:{
                name:'123',
                age:234
            }
        }
        var res = {}
        for(var x in obj){

            if(obj[x].constructor === Object){
                var res1 = {}
                for(var i in obj[x]){
                     res1[i] = obj[x][i];
                }


                
            }
            res[x] = obj[x]
        }
        console.log(res);

Json对象

  • Json对象 就是数据,ison格式数据
  • 数据格式------json-------xml
  • json可以完成深拷贝
  • 注意 字符串 与 Json 字符串 是不同的
  • 字符串是不能独立语言单独存在,比如;这里js 支持但是java 不支持
  • json 可是独立语言单独存在。比如 str_josn js 支持 java 也支持
var arr = [1,[1,2]];
        var arr_json = JSON.parse(JSON.stringify(arr));
        arr[1].push('tast')
        console.log(arr,arr_json);