十三、深拷贝vs浅拷贝
-
共同点:拷贝 = 复制
-
浅拷贝:只复制引用,未复制真正的值 ➡️ 互相影响
var arr1 = [1,2,3]
var arr2 = arr1 //并没有新建一个对象
arr1[0] = 99
arr2[2] = 100
console.log(arr1, arr2) //完全相同:指向同一个对象
var obj1 = {a:1, b:2}
var obj2 = Object.assign(obj1)
obj1.a = 'as'
obj2.b = 'bs'
console.log(obj1, obj2) //完全相同
- 深拷贝:复制真正的值 ➡️ 创建新对象、独立、互不相干
var obj1 = {a:1, b:2}
var obj2 = JSON.parse(JSON.stringify(obj1))
obj1.a = 100
obj2.b = 200
console.log(obj1, obj2) //不同引用,不一样
var obj = {a:1, b:2}
function copyObj(obj) {
if (Array.isArray(obj)){ var newObj = [] }
else { var newObj = {} }
for (var k in obj){
if(typeof obj[k] != 'object'){ newObj[k] = obj[k] }
else { newObj[k] = copyObj(obj[k]) }
}
return newObj
}
console.log(copyObj(obj))