js通常有兩種不一樣數據類型的值:數組
基本類型(包括undefined,Null,boolean,String,Number),按值傳遞;對象
引用類型(包括數組,對象),按址傳遞,引用類型在值傳遞的時候是內存中的地址。例如:blog
若是你修改b的值,那麼a變量的值也發生了變化。遞歸
克隆或者拷貝分爲2種:淺度克隆(拷貝),深度克隆(拷貝);內存
淺度克隆:基本類型爲值傳遞,對象仍爲引用傳遞。io
深度克隆:全部元素或屬性均徹底克隆,並於原引用類型徹底獨立,即,在後面修改對象的屬性的時候,原對象不會被修改。function
個人代碼以下: 主要用了遞歸。變量
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;
}
}數據類型