深拷贝

109 阅读1分钟

场景:

//目标:在数组里存两个对象,两个对象只有a属性的值是不同的
let arr = []
let obj = {a:111,b:222}

arr.push(obj) 
console.log(arr)  //[{a:111,b:222}]

obj.a = 333
arr.push(obj)
console.log(arr)  //[{a:333,b:222},{a:333,b:222}]

//将对象存进数组是保存对象的引用地址,所以在原对象上修改属性的值会影响存进数组的值,所以要进行深拷贝
//有些杠精会说:你怎么声明多一个对象obj2 = {a:333,b:222}不就完了吗。
//注意这只是一个栗子,如果要存的对象拥有非常多的属性上面的做法就显得很笨
//深拷贝:
let arr = []
let obj = {a:111,b:222}
function deepClone(obj){
    return JSON.parse(JSON.stringify(obj))
}
arr.push(deepClone(obj))
console.log(arr)  //[{a:111,b:222}]

obj.a = 333
arr.push(deepClone(obj))
console.log(arr)  //[{a:111,b:222},{a:333,b:222}]