js實現深拷貝的5種方式

2022-07-31 22:57:27 字數 1742 閱讀 6555

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的...