json方法實現
//_tmp和result是相互獨立的,沒有任何聯絡,有各自的儲存空間。
let deepclone = function (obj) ;
let obj1 = ,
liuxiaotian:
};let test = deepclone(obj1);
console.log(test);1234567891011121314151617181920
2.用for…in實現遍歷和複製
function deepclone(obj) ;
if (obj && typeof obj === 'object') else
}return result;
}return obj;
}let testarray = ["a", "b", "c", "d"];
let testres = deepclone(testarray);
console.log(testres);
console.log(typeof testres[1]);
let testobj =
};let testres2 = deepclone(testobj);
testres2.family.brother = "weibo";
console.log(testres2);
3.利用陣列的array.prototype.foreach進copy
let deepclone = function (obj) );
return copy;
};let testobj =
}let testres2 = deepclone(testobj);
console.log(testres2);
4.淺拷貝(使用object.assign方法)
let target=;
let testarr=[2,3,5,8];
object.assign(target,testarr);
console.log(target);
testarr.push(8);
console.log("我是原來的"+target+",我是現在的"+testarr);
5。遞迴
var obj =
var obj2 = {};
for(var i in obj)
obj2.name = "root";
console.log(obj.name); //admin
console.log(obj2.name); //root
```####改變深拷貝的封裝函式
```js
[{}, , true]
// 定義乙個深拷貝函式 接收目標target引數
function deepclone(target)
// 判斷如果當前的值是null的話;直接賦值為null
} else if (target === null) else if (target.constructor === regexp) else ;
for (let i in target)
}// 如果不是物件的話,就是基本資料型別,那麼直接賦值
} else
// 返回最終結果
return result;
js實現深拷貝的兩種方式
一 基本資料型別 資料分為基本資料型別 string null boolean undefined symbol number 和引用資料型別。基本資料型別的特點 直接儲存在棧中的資料。引用資料型別的特點 儲存的是該物件在棧中的引用,真實資料儲存在堆中。引用資料型別在棧中儲存了指標,該指標指向堆中該...
JS淺拷貝與深拷貝實現方式
js淺拷貝與深拷貝只針對的是陣列 array 和物件 object 兩種引用資料型別。引用型別的資料在記憶體中分兩部分儲存,分別是儲存在棧中的引用位址和儲存在堆中的資料。淺拷貝其實拷貝的是引用型別資料的位址,兩個物件共享堆中的資料,乙個物件改變了某個屬性值,另乙個物件的屬性值也會跟著改變。而深拷貝則...
js實現深拷貝
深拷貝 深拷貝本身只針對較為複雜的object型別資料,但是含義的話比如基本資料型別a和b的賦值操作,賦值之後b有自己的記憶體空間,a,b之間互不影響 淺拷貝 引用資料型別 名存在棧記憶體中,值存在於堆記憶體中,但是棧記憶體會提供乙個引用的位址指向堆記憶體中的值。當b a進行拷貝時,其實複製的是a的...