深拷贝几种方法
#深拷貝指的是:將原對象的各個屬性逐個復制出去,而且將原對象各個屬性所包含的對象也依次采用深復制的方法遞歸復制到新對象上。并開辟了一塊新的內存地址來存放復制的對象。
當對對象a進行深拷貝給對象b后,之后無論是對a操作還是對b操作,都是指改變自己的內容。實現深拷貝的方法有很多種,如下:
#1、JSON.stringify/parse的方法
下面展示一些 內聯代碼片。
// A code block var foo = 'bar'; // An highlighted block let arr1 = [1,2,3,4]; let arr2 = JSON.parse(JSON.stringify(arr1)); arr2.push(5); console.log(arr1); //[1, 2, 3, 4] console.log(arr2); //[1, 2, 3, 4, 5]const obj1 = {a:'a',b:'b'}; const obj2 = JSON.parse(JSON.stringify(obj1));0bj2.a = 'aa';console.log(0bj1); // {a:'a',b:'b'}; console.log(0bj2); // {a:'aa',b:'b'};對于簡單的對象使用該方法是可以正常進行深拷貝的,但是如果對象中含有function則會出現問題
下面展示一些 內聯代碼片。
#JSON.stringify/parse實現深拷貝的時候,需要求目標對象(非 undefined,function)
#2、使用遞歸方法
使用遞歸方法,就是對每一層的數據都實現一次 創建對象->對象賦值的操作
下面展示一些 內聯代碼片。
改函數可以深拷貝數組、對象、以及帶函數的對象。
————————————————
版權聲明:本文為CSDN博主「魚丸粗面不要香菜」的原創文章,遵循CC 4.0 BY-SA版權協議,轉載請附上原文出處鏈接及本聲明。
原文鏈接:https://blog.csdn.net/qq_41080490/article/details/82493394
總結
- 上一篇: 打开计算机系统无法访问指定的,win10
- 下一篇: OpenBSD 7.2版发布 新增苹果M