js基础-题目28

本文探讨了JavaScript中对象拷贝的两种常见方式——浅拷贝(如Object.assign)和深拷贝(如使用扩展运算符)。通过示例展示了这两种拷贝在处理基本类型和引用类型属性时的区别。在浅拷贝中,修改源对象会影响副本,而在深拷贝中则不会。同时,Object.assign还可用于对象的合并,并仅比较和合并第一层属性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

整理下之前做的有点疑惑的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 }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

柳晓黑胡椒

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值