js一般有兩種不同資料型別的值:
基本型別(包括undefined,Null,boolean,String,Number),按值傳遞;
引用型別(包括陣列,物件),按址傳遞,引用型別在值傳遞的時候是記憶體中的地址。例如:
如果你修改b的值,那麼a變數的值也發生了變化。
克隆或者拷貝分為2種:淺度克隆(拷貝),深度克隆(拷貝);
淺度克隆:基本型別為值傳遞,物件仍為引用傳遞。
深度克隆:所有元素或屬性均完全克隆,並於原引用型別完全獨立,即,在後面修改物件的屬性的時候,原物件不會被修改。
我的程式碼如下: 主要用了遞迴。
function cloneObject(obj){
if(obj === null){
return null;
}else if(obj instanceof Array){
var arr = [];
for(var i = 0, ilen = obj.length; i < ilen; i+=1){
arr[i] = obj[i];
}
return arr;
}else if(obj instanceof Date || obj instanceof RegExp || obj instanceof Function){
return obj;
}else if(obj instanceof Object){
var o = {};
for(var i in obj){
if(obj.hasOwnProperty(i)){
o[i] = cloneObject(obj[i]);
}
}
return o;
}else{
return obj;
}
}