常用的淺拷貝實現方法

2022-03-04 14:28:21 字數 1926 閱讀 4363

淺拷貝:拷貝的是引用,當引用的值改變時,另外乙個也會跟著改變;

淺拷貝新舊物件還是共享同一塊記憶體,改變其中乙個,另乙個也會受影響,這樣修改,會失去原始資料。

深拷貝:複製出乙個全新的物件例項,新物件跟原物件不共享記憶體,兩者操作互不影響

深拷貝和淺拷貝的使用場景是在複雜物件裡,複雜資料型別裡:object,array,funtion

1,object.assign

es6中拷貝物件的方法,接受的第乙個引數是拷貝的目標target,剩下的引數是拷貝的源物件sources(可以是多個)

let target ={};

let source =

}object.assign(target,source);

console.log(target);

//}

object.assign使用注意事項:

let copy2 = object.assign({}, )

let array = [,]

let array1 = array.slice(0);

console.log(array1)

slice:從已有的陣列中返回選定的元素

let obj = }

let obj2 =

console.log(obj2)

參考:二,實現深拷貝

//

1. josn.stringify()/json.parse()

let obj = }

json.parse(json.stringify(obj)) //

2. 遞迴拷貝

function

deepclone(obj)

for (let i in

obj)

} return

copy

}

三,實現深淺拷貝

//

淺拷貝實現

function

shallowcopy(obj)

for (var prop in

obj)

}return

dst }

var obj =

var shallowobj =shallowcopy(obj)

console.log(shallowobj.arr[1])

shallowobj.arr[1] = 5;

console.log(obj.arr[1])

//賦值

let a =

let b =a;

b.name = 22;

console.log(a)

//淺拷貝

//深拷貝:拷貝例項

function

deepcopy(obj)

return

n; }

else

if (obj instanceof

object) ;

for (let i in

obj)

return

n; }

else

}var obj2 =

var deepobj =deepcopy(obj2)

console.log('深拷貝', deepobj.arr[0])

deepobj.arr[1] = 6;

console.log('深拷貝' + obj2.arr[0])

//深拷貝:通過json解析實現

//把乙個物件轉成json字串在轉成json物件

let obj3 =

json.parse(json.stringify(obj3))

//參考:

js的深拷貝淺拷貝的實現方法

首先深拷貝淺拷貝是基於堆的引用型別。一 在棧中儲存字串 數字 布林值以及指向堆的位址等確定的固定值 使用另乙個變數d等於a,相當於d拷貝了a 在棧記憶體中開闢了乙個新空間d 棧中a和d兩個已經是互不相干變數,無論另乙個值怎麼變化都不會對其他值造成影響 二 堆中儲存函式 陣列 物件,這些可以新增,減少...

實現淺拷貝與深拷貝

js包含基本資料型別與引用資料型別兩種不同的資料型別的值,深拷貝與淺拷貝的概念只存在於引用資料型別。對於引用型別,淺拷貝是拷貝了指向這個物件堆記憶體的指標,是拷貝了對原物件引用,深拷貝是拷貝了該物件的所有屬性到乙個新的物件,若是原物件的某屬性依然引用了其他物件,那麼需要將原物件引用的其他物件一併進行...

JS中淺拷貝和深拷貝的使用,深拷貝實現方法總結

1 淺拷貝 兩個物件經過拷貝後雖然具有相同的屬性,但是他們都指向同乙個記憶體空間。操作會引起引用,同一位址的變數一起改變。let a let b a b.x 2 console.log b console.log a 2 深拷貝 兩個物件除了拷貝了一樣的屬性,沒有任何其他關聯 指向不同的記憶體空間 ...