JavaScript克隆一个对象,老方法执行的只是浅拷贝,需要特别注意

点击上方蓝字关注“小郑搞码事”,每天都能学到知识,搞懂一个问题!

如何克隆一个对象,日常工作中我们会根据一些实际情况,采取一些或复杂或简单的方式,其中最为简单的方法就是利用对象的方法,如下:

Object.assign({}, obj)

举一个例子:

JavaScript克隆一个对象,老方法执行的只是浅拷贝,需要特别注意

控制台输出同样一个对象,实现了对obj的拷贝。

JavaScript克隆一个对象,老方法执行的只是浅拷贝,需要特别注意

需要注意的是,这种方法执行的是浅拷贝,而不是深拷贝,这就意味着嵌套的对象不会被复制。仍然引用与原始相同的嵌套对象。

一,看一段代码的输出

JavaScript克隆一个对象,老方法执行的只是浅拷贝,需要特别注意

这段代码中,obj里有一个属性对象c。执行克隆之后,复制的只是c的引用。先看一下这段代码的输出结果:

JavaScript克隆一个对象,老方法执行的只是浅拷贝,需要特别注意

接下来我们来改变一些属性值,重新输出。

二,重置属性后的输出

JavaScript克隆一个对象,老方法执行的只是浅拷贝,需要特别注意

我改变了两个属性值,一个是属性c对象里的一个属性age。一个是属性b。看一下输出结果:

JavaScript克隆一个对象,老方法执行的只是浅拷贝,需要特别注意

结果发现,那个克隆的对象b属性没有变,说明它拷贝成功,而c里的age也变成了45,那就说明它没有真正拷贝。

总结一下:

Object.assign执行的是浅拷贝,要记住这一点,这个方法的用处是很大的。最常用的场景就是前端给接口传参数据的时候。


分享到:


相關文章: