Javascript中的浅拷贝和深拷贝
一、浅拷贝:
如果是值类型,则拷贝值;如果是引用类型,则拷贝引用地址。
Object.prototype.shallowClone = function(){
var obj = new Object;
for(var property in this){
obj[property] = this[property];
}
return obj;
}
var obj = new Object;
for(var property in this){
obj[property] = this[property];
}
return obj;
}
二、深拷贝:
值类型和引用类型都是重新拷贝。
function deepClone(object){
if(object == null) return null;
if(("number boolean string undefined").indexOf((typeof object).toLowerCase()) >= 0)
return object;//值类型 直接返回
if(object instanceof Array){
var newArray = [];
for(var i=0;i<object.length;i++){
newArray.push(deepClone(object[i]));
}
return newArray;
}
var obj = new Object();
for(var property in object){
obj[property] = deepClone(object[property]);
}
return obj;
}
if(object == null) return null;
if(("number boolean string undefined").indexOf((typeof object).toLowerCase()) >= 0)
return object;//值类型 直接返回
if(object instanceof Array){
var newArray = [];
for(var i=0;i<object.length;i++){
newArray.push(deepClone(object[i]));
}
return newArray;
}
var obj = new Object();
for(var property in object){
obj[property] = deepClone(object[property]);
}
return obj;
}
三、测试: