关于javascript中的深拷贝问题

  一直在尝试为javascript找一个快捷可靠的对象深拷贝的方法,昨天突发奇想,把对象push到一个空数组里,然后对改数组通过concat()或slice()进行拷贝,然后取出数组的第一个元素复制给变量,这个变量岂不就是深拷贝的对象么。说干就干,上代码

    var a = {
      b: {
        c: 1
      }
    };
    var arr = [];
    arr.push(a);
    var x = arr.slice(0);
    arr[0].b = 12;
    console.log(x[0].b);

  若成功的话,控制台里是对象{c: 1},否则是12。

 

  失败了,看样子数组的concat、slice()等方法并不会对原数组进行深拷贝,只是浅复制了一层,内部的元素若为对象,仍是堆地址引用。

  若要对对象进行深拷贝,还是要用jquery的extend方法,要不就用json吧,尽管json会有问题,可以参考这篇文章

 

posted @ 2017-03-17 10:26  姜瑞涛  阅读(201)  评论(0编辑  收藏  举报