JavaScript深拷贝其实可以很简单

发布时间:2018-12-18 作者:一点通


众所周知,JS中拷贝对象分为浅拷贝和深拷贝,一个是拷贝引用,一个是拷贝里面的数据成新的对象。很多情况下我们需要的其实就是深拷贝,那么究竟如何实现深拷贝呢?

通常我们会想到遍历源对象的所有键值,但是一层还好解决,多层呢?是不是还得写个递归。有没有简单一点的方式呢?

当然,这个时候该我们的主角登场了:JSON.stringify()(负责将JSON对象转换成字符串)和JSON.parse()(负责将JSON字符串转换成对象)

var a = {name: 'tom'}
var b = JSON.parse(Json.stringify(a))

如上b就是对a的一个深拷贝了

当对象中包含undefined、函数以及symbol值的时候,在JSON.stringify()序列化过程中会被忽略,所以需要避免在包含上述值的源对象中采用这种拷贝方式