深拷贝与浅拷贝(针对井字棋游戏讲解)

本文介绍了JavaScript中的值类型和引用类型的区别,通过实例展示了引用类型在赋值时如何共享内存。文章强调了浅拷贝(如concat)会导致原始数组被修改的问题,并提出了使用slice进行深拷贝以避免影响原始数组的方法。讨论了在处理复杂数据结构时深拷贝的重要性。
摘要由CSDN通过智能技术生成

一、js中两种类型

1.值类型:值类型的复制仅是对值的复制,如下图,对于b的改变a不变,即只是值的复制
在这里插入图片描述

引用类型:(借下图讲解)相当于a开辟了一个空间,空间里面存了相关数据,b通过’b=a‘也指向了那个房子,而不是简单的值的复制,所以b的改变引起了a的改变
2.类型包括:Array,Object
在这里插入图片描述

二、本例

如下:这里的game只是取出了his的第0项,然后game改变的同时,his数组第0项也会发生改变
在这里插入图片描述
如对其进行concat复制操作时:发现并不是将一条新的记录添加到了原有数组上,而是连同原数组一同做了改变,这应该就是所谓的浅拷贝,即会改变原始数组的值,
在这里插入图片描述
为了解决这一问题,引入了深拷贝,即js的slice方法。slice 方法会返回一个新的 Array 对象,这个新的数组与原数组是不同的地址,所以即使game改变也影响不到history数组,样例如下:
在这里插入图片描述
所以只需在concat复制后面加一个slice即可完成深拷贝(改变拷贝出来的数组的某项值后,对原来数组没有任何影响)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值