深拷贝几种方法
#深拷貝指的是:將原對象的各個屬性逐個復(fù)制出去,而且將原對象各個屬性所包含的對象也依次采用深復(fù)制的方法遞歸復(fù)制到新對象上。并開辟了一塊新的內(nèi)存地址來存放復(fù)制的對象。
當(dāng)對對象a進(jìn)行深拷貝給對象b后,之后無論是對a操作還是對b操作,都是指改變自己的內(nèi)容。實(shí)現(xiàn)深拷貝的方法有很多種,如下:
#1、JSON.stringify/parse的方法
下面展示一些 內(nèi)聯(lián)代碼片。
// 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'};對于簡單的對象使用該方法是可以正常進(jìn)行深拷貝的,但是如果對象中含有function則會出現(xiàn)問題
下面展示一些 內(nèi)聯(lián)代碼片。
#JSON.stringify/parse實(shí)現(xiàn)深拷貝的時候,需要求目標(biāo)對象(非 undefined,function)
#2、使用遞歸方法
使用遞歸方法,就是對每一層的數(shù)據(jù)都實(shí)現(xiàn)一次 創(chuàng)建對象->對象賦值的操作
下面展示一些 內(nèi)聯(lián)代碼片。
改函數(shù)可以深拷貝數(shù)組、對象、以及帶函數(shù)的對象。
————————————————
版權(quán)聲明:本文為CSDN博主「魚丸粗面不要香菜」的原創(chuàng)文章,遵循CC 4.0 BY-SA版權(quán)協(xié)議,轉(zhuǎn)載請附上原文出處鏈接及本聲明。
原文鏈接:https://blog.csdn.net/qq_41080490/article/details/82493394
總結(jié)
- 上一篇: 打开计算机系统无法访问指定的,win10
- 下一篇: OpenBSD 7.2版发布 新增苹果M