浅拷贝和深拷贝浅谈

对于文章有任何问题随时欢迎指正。

浅拷贝和深拷贝是作用于数组和对象中复制内容常用的方法,它们描述了拷贝操作对原始数组或者是原始对象的影响程度。

浅拷贝:创建了一个新的数组/对象,而这对新的数组/对象就是对原始数组/对象的引用,只是复制了原始 数组/对象的一层解构,如果修改了新数组/对象的值,也会影响到原始数组。常用的浅拷贝的方法有,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,

但是深拷贝也有一些问题,比如说对大型且复杂的数组/对象进行深拷贝时,也会导致相应的性能开销增大。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值