js对象、数组,改变原数据后新数据也随之改变

js对象、数组,改变原数据后新数据也随之改变

有时候我们可能会有这样的需求,对原数据处理后能有另一份没有改变的原数据。

var a = {'num':1};//原数据
var b = a;//假设我们用b来存储
a.num = 2;//对原数据进行一些改变
console.log(b.num);//2

上面这种方法是达不到我们想要的效果的,因为实际在给b赋值时,是进行了传址操作,也就是说让b跟a指向同一个地址,实际数据只有一份,所以a改变时b也会随之改变。一般的解决方法有深拷贝、转化为字符串。深拷贝可以去我的另一篇JS进阶里面有个extend方法,实际就是循环递归,拷贝一份一模一样的出来,下面简单写一下字符串转化的方法。

var a = {'num':1};
var b = JSON.stringify(a);
a.num = 2;
console.log(JSON.parse(b.num));//1

 数组也是一样的,引用类型都是进行传址操作,而基本类型是传值,下面说一个需要注意的地方吧。。

var arr = [1,2,3]   //定义一个数组
var newArr = arr;   //传址
arr = [];           //改变数据

 那么问题来了。。newArr是多少,可能很多人会想,不是说传址操作,原来的为空了,新的肯定也是新的啦。但是不是这样子的,newArr仍然为 [1,2,3] 。

为什么会这样呢,因为你让arr为空的时候,相当于将arr指向了一个新的内存地址,重新进行赋值,所以它已经跟原来没有关系了。

希望对大家有帮助!         

                                                                       o(* ̄︶ ̄*)o


 

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值