一直在尝试为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会有问题,可以参考这篇文章。
时间: 2024-10-05 00:24:39