关于JS深度复制对象
浅复制的简单介绍
- 可以用对象复制的方法进行浅复制:
var o = {a:1,b:2};
var o1 = o;
console.log(o1);
这样以最简单的赋值方法进行复制,则会产生一个问题,即当o1进行修改,对象o也会被修改,如:
var o = {a:1,b:2};
var o1 = o;
o1.b=10;
console.log(o);
console.log(o1);
当这样对o1进行修改,则o的值也相应被改变,结果如下
由上,出现这种情况是因为o和o1作为对象存储于栈中,而作为对象的属性和值,则存储于堆中,相当于栈中的对象是堆中属性和值的地址的映射,即对象引用堆中的地址
当然也可以这种挨个赋值复制的,利用for,in循环
var obj={value:1,next:2};
var obj1={}; //这里准备一个被复制的空对象
for(var prop in obj){
obj1[prop] = obj[prop];
}
console.log(obj);
console.log(obj1);
注:[prop]中的prop是作为一个变量,与[“prop”]不同,后者中的prop表示一个固定