js深拷贝和浅拷贝

原创 苏秦陶侃 教程 js 320阅读 2018-04-10 12:16:10 举报

js深拷贝和浅拷贝

浅拷贝是指只是把原有对象的所有属性拷贝了一遍,但这个拷贝是把所有基本类型拷贝了一遍,但是对象和数组的话只是拷贝了他们的引用。
深拷贝是指将原有对象的所有属性全部重新拷贝一份,拷贝到另一个存储空间中。

js浅拷贝

常用技巧:

  1. 若为数组则可以使用slice、concat方法进行实现。

自己实现一个浅拷贝:

js深拷贝

技巧

JSON.stringify。缺点是不能拷贝嵌套的function,嵌套的function属性和值在对象中会直接丢失、在数组中该位置会变为null,也就是说如果被拷贝的对象中含有function则此方法不适用。
JSON.stringify(..) 在对象中遇到 undefined 、 function 和 symbol 时会自动将其忽略, 在 数组中则会返回 null (以保证单元位置不变)。
对包含循环引用的对象执行 JSON.stringify(..) 会出错。

自己实现一个深拷贝

性能问题

尽管使用深拷贝会完全的克隆一个新对象,不会产生副作用,但是深拷贝因为使用递归,性能会不如浅拷贝,在开发中,还是要根据实际情况进行选择。

对象和数组的相等比较

评论 ( 1 )
最新评论
牛粪 2018-04-11 16:00:22 1F

以前面试又被问到深拷贝和浅拷贝的问题