整理下之前做的有点疑惑的js基础题目和大家分享以下,如果大家觉得有用,别忘了点一下赞哦
基本类型的"深拷贝"
const a = {x:1,s:{y:2}}
const b= {...a}//flag1
const c = {}
Object.assign(c,a)//flag2
a.x = 2
console.log(a.x)//2
console.log(b.x)//1
console.log(c.x)//1
a.s.y = 3
console.log(b)//{x:1,s:{y:3}}
console.log(c)//{x:1,s{y:3}}
这题的主要问题是
flag1处和flag2处的操作有什么区别
flag1处:相当于把 a对象展开了一层,再把这一层拷贝到一个新的对象,这样第一层中的基本类型的就不是通向同一个指针,而里面的引用类型的还是指向同一个指针
flag2处:Object.assign也是基本类型的深拷贝,可以认为是一个浅拷贝,只拷贝第一级
这里Object.assign 还可以实现浅比较(把两个对象合并成一个)
这个方法也是只比较第一级
const obj1 = {a:1,f:{c:2}}
const obj2 = {a:2,b:2,f:{d:5}}
console.log(obj1)//{ a: 2, f: { d: 5 }, b: 2 } 合并到obj1并返回
console.log(Object.assign(obj1,obj2))//{ a: 2, f: { d: 5 }, b: 2 }
JavaScript中的对象拷贝与合并:深拷贝与浅拷贝解析
本文探讨了JavaScript中对象拷贝的两种常见方式——浅拷贝(如Object.assign)和深拷贝(如使用扩展运算符)。通过示例展示了这两种拷贝在处理基本类型和引用类型属性时的区别。在浅拷贝中,修改源对象会影响副本,而在深拷贝中则不会。同时,Object.assign还可用于对象的合并,并仅比较和合并第一层属性。
142

被折叠的 条评论
为什么被折叠?



