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