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