深拷贝和浅拷贝(只针对引用数据类型才有类似问题):
1 浅拷贝是复制一个对象的指针,并没有复制对象本身,新旧对象指向同一个内存;但深拷贝会另外创造一个一模一样的对象,新对象跟原对象不共享内存,修改新对象不会改到原对象;
2
区别:浅拷贝只复制对象的第一层属性、深拷贝可以对对象的属性进行递归复制;
(js中assign方法 语法Object.assign(target,…sources)
当target和sources对象中有相同的key时,在target对象中的值会被后面source对象的值覆盖。
例如:var o1 = { a: 1 };
varo2 = { b: 2 };
varo3 = { c: 3 };
varobj = Object.assign(o1, o2, o3);
console.log(obj);// { a: 1, b: 2, c: 3 }
console.log(o1); // { a: 1, b: 2, c: 3 }, target对象自身会被修改
)
如果想要避免o1被改变,需要这样写:
var obj = Object.assign({},o1,o2,o3);//给一个空对象作为target,这样改变的是空对象
console.log(obj);// { a: 1, b: 2, c: 3 }
console.log(o1); // { a: 1}
网友评论