对于文章有任何问题随时欢迎指正。
浅拷贝和深拷贝是作用于数组和对象中复制内容常用的方法,它们描述了拷贝操作对原始数组或者是原始对象的影响程度。
浅拷贝:创建了一个新的数组/对象,而这对新的数组/对象就是对原始数组/对象的引用,只是复制了原始 数组/对象的一层解构,如果修改了新数组/对象的值,也会影响到原始数组。常用的浅拷贝的方法有,Object.assign
const obj1 = { name: 'cxk', age: 18 };
const obj2 = Object.assign({}, obj1);
console.log(obj2); // { name: 'cxk', age: 18 }
和 Array .prototype.slice()
const arr1 = ['练习', '时长', '两年', '半'];
const arr2 = arr1.slice();
console.log(arr2); //['练习', '时长', '两年', '半'];
,es6中的展开运算符...
const arr1 = ['练习', '时长', '两年', '半'];
const arr2 = [...arr1];
console.log(arr2); // ['练习', '时长', '两年', '半'];
const obj1 = { name: 'cxk', age: 18 };
const obj2 = { ...obj1 };
console.log(obj2); // { name: 'cxk', age: 18 }
深拷贝:创建一个全新的数组或者对象,相互独立,互不干扰。深拷贝会递归复制原始数组/元素中所有的嵌套属性,而不是一层结构。所以对新数组/对象的改动不会影响到原始数组/元素内的属性,
const obj1 = { name: 'cxk', age: 18 };
const obj2 = JSON.parse(JSON.stringify(obj1));
obj2.name = 'xz';
console.log(obj1.name); // 'cxk'
console.log(obj2.name); // 'xz'
深拷贝的方法除了 JSON.parse(JSON.stringify())还有一些第三方库可以实现深拷贝,比如lodash的cloneDeep,
但是深拷贝也有一些问题,比如说对大型且复杂的数组/对象进行深拷贝时,也会导致相应的性能开销增大。