关于深拷贝

今天的code rewiew , 看到了如下的代码来实现深拷贝的效果。

var a = {name:'demo'};
var c = JSON.parse(JSON.stringify(a))

其实这样的实现,看似是解决了问题:防止数据的意外篡改。但是,其实有很多的隐患。

性能

首先是前端性能问题,这样做,对浏览器的性能消耗其实是很大的。尤其是在页面频繁render的时候,方法被重复调用,严重的话可能会导致浏览器的卡顿。

缺陷

通过序列化和反序列化的方式,来实现数据的深拷贝,对于普通的对象或者数组来说,本身没有什么问题,但是对于一些特殊的类型,其实是有缺陷的,比如NaN,比如Inifinity:

var a = {name:NaN,code:Infinity};
var c = JSON.parse(JSON.stringify(a))//{name: null, code: null}

而且如果出现循环引用的问题,同样是不可靠的。

总结

仅仅综合这几点的话,我们在日常的开发中,就应该规避这种情况。解决的方法就是抛弃需要 deep clone 的代码。
而且对于数据的修改,你本身应该就是能够预期的,在这种情况下,我们也可以针对某些数据,替换覆盖,而不是粗暴的去深拷贝。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值