浅拷贝:
只针对当前对象的属性进行拷贝,若当前对象的属性是引用类型时,这个不考虑,不进行拷贝。
若属性是引用类型,拷贝后引用的是地址,如果进行更改,会影响拷贝的原对象属性。
var newObj = {} for(var key in obj) { //key是当前属性名, obj[key]是当前属性值 newObj[key] = obj[key] }
深拷贝:
针对当前对象的数据的所有引用结构都拷贝一份,数据在内存中是独立的。
若属性是引用类型,如果进行更改,不会影响拷贝的原对象属性。
js使用扩展方法实现深拷贝
Object.prototype.DeepCopy = function () { // 1, 创建一个对象 var temp = {}; // 2, 拷贝属性, 判断如果是引用类型需要深拷贝 for (var k in this) { if (typeof this[k] === 'object') { temp[k] = this[k].DeepCopy(); } else { temp[k] = this[k]; } } // 3, 返回对象 return temp; };
测试:
var arr = [{ name: "j1" }, { name: "j2" }, { name: "j3" }]; var arrtoo = arr.DeepCopy(); arrtoo[1].name = "cccc"; alert(arr[1].name); alert(arrtoo[1].name);
结果:j2 cccc
扩展方法:http://www.cnblogs.com/kissdodog/p/3386480.html