两者的概念和区别
对于基本数据类型(Undefined、Null、String、Number、Boolean),浅拷贝是对值的复制,改变其中一个的值另一个不会跟着改变。对于对象来说,浅拷贝是对地址的复制,并没有开辟新的栈,也就是复制的结果是两个对象指向同一个地址,修改其中一个对象的属性,则另一个对象的属性也会改变;而深拷贝则是开辟新的栈,两个对象对应两个不同的地址,修改一个对象的属性,不会改变另一个对象的属性。
深拷贝的实现方式
关于深拷贝的实现,网上也有很多方式了。在此我总结了几种我用的比较多的。
方式一:递归拷贝
1 | function deepClone(obj,newObj) { |
方式二:jquery中$.extent方法
1 | var obj03 = { |
方式三:JSON.parse方法
1 | var obj = { |
以上三种方式都可以实现对对象的深拷贝。
对数组的深拷贝
对数组的深拷贝可以使用下面这种方式:1
2
3
4
5var ary = ['one','two','three'];
var ary02 = ary.slice(0);
ary02.push('four');
console.log(ary);//['one','two','three']
console.log(ary02);//['one','two','three','four']
上面是个人的总结,如果错误,欢迎留言交流!