js深拷貝和淺拷貝

2021-10-13 00:14:57 字數 1602 閱讀 6670

// 1. 迭代遞迴法

// for...in...法

// 1.1 對物件進行迭代操作,對它的每個值進行遞迴深拷貝。

function isobject(o)

function deepclone(obj)

let isarray = array.isarray(obj)

let cloneobj = isarray? :{}

for(let key in obj)

return cloneobj

}

把簡單型別也考慮進去

function deepclone(obj)

for(let i in obj)

}else

return result

}

// 2、reflect 法 

function deepclone(obj)

let isarray = array.isarray(obj)

let cloneobj = isarray? [...obj]:

reflect.ownkeys(cloneobj).foreach(key=>)

return cloneobj

}

// 3. 序列化反序列化法

使用json物件的parse和stringify方法來實現深拷貝

function deepclone(obj)

let a = [0,1,[2,3],4],

b = deepclone(a);

a[2][0] = 1

console.log(a,b)

// 3.2

let o1 =

}let o2 = json.parse(json.stringify(o1))

o1.c =

console.log(o1,o2)

// 4、第四種方法(不適用基本型別)

function deepclone(s)

for(k in s)else

}return d

}

//測試

let arr = [12,3,45,67,[34,56,24]]

let arr1 = deepclone(arr)

let arr2 = arr

arr.push(5)

console.log(arr)

console.log(arr1)

console.log(arr2)

let obj =

let obj1 = deepclone(obj)

let obj2 = obj

obj.like = "draw"

console.log(obj1)

console.log(obj2)

// let c = "character"

// let c1 = deepclone(c)

// console.log(c1)

**2位博主:

奔跑吧、gzb

yisainan

JS深拷貝和淺拷貝

js中物件分為基本型別和復合 引用 型別,基本型別存放在棧記憶體,復合 引用 型別存放在堆記憶體中 堆記憶體中用於存放由new建立的物件,棧記憶體存放一些基本型別的變數和物件的引用變數 對於簡單變數,記憶體小,直接複製不會發生引用 var a 123 var b a a 123456 console...

JS淺拷貝和深拷貝

1.淺拷貝 copy var obj1 物件存放於堆記憶體中,物件中的鍵值對,值可以為物件,可以為陣列.var obj2 obj1 物件,陣列之間只有引用賦值 obj2.name 撒哈哈 當改動物件obj2的時候,obj1的key對應的value也會更改這是淺拷貝 深拷貝 var obj1 var ...

js深拷貝和淺拷貝

走在前端的大道上 var m var n m n.a 15 這時m.a的值是多少 m.a會輸出15,因為這是淺拷貝,n和m指向的是同乙個堆,物件複製只是複製的物件的引用。深拷貝和上面淺拷貝不同,就是徹底copy乙個物件,而不是copy物件的引用,例如,還是之前的例子,我們這麼寫 var m var ...