简单的拷贝
var obj1 = {a:10,b:20}
var obj2 = obj1
obj2.a = 0
console.log(obj1)//得到0,obj1的a也被改变
这是因为浅拷贝只复制指向某个对象的指针,而不复制对象本身,新旧对象还是共享同一块内存,修改新对象也就相当于修改原对象。
一.浅拷贝的实现
1.遍历赋值
function simpleClone(data){
var obj = {};
for ( var i in data) {
obj[i] = data[i];
}
return obj;
}
var obj1 = {a:10,b:{c:20}}
var obj2 = simpleClone(obj1)
obj2.a = 0
console.log(obj1)//10
obj2.b.c = 0
console.log(obj1.b.c)//0
//虽然第一层没有被修改,但是第二次还是指向原来的对象
2.Object.assign
var obj1 = {a:10,b:{c:20}}
var obj2 = Object.assign({}, obj1)
3.es6扩展运算符
var obj1 = {a:10,b:{c:20}}
var obj2 = {...obj1}