js 深复制选择哪种方法

js复制object类型时,如果直接使用赋值,则会变成引用,如果想创建一个新对象,则要复制里面每一个元素

查询之后,发现两种现成的方式:

  1. 转为json再转回来
newObject = JSON.parse(JSON.stringify(oldObject))
  1. 使用Object.assign()
newObject = Object.assign({}, oldObject)

两种都可以达成,不知道哪一种比较好用?在执行速度上面

阅读 1.9k
2 个回答

首先指出一点错误,Object.assign({}, oldObject)不是深拷贝,而是浅拷贝。

深拷贝方法很多,选一种适合的业务场景的就行了。

1、使用 JSON.parse(JSON.stringify(obj))。不能拷贝值为 null,undefined,函数字段

2、使用 MessageChannel + postMessage,通过消息队列传递数据,实现深拷贝。不能拷贝函数

3、手写一个深拷贝,解决上述方案的问题。案例

看着可以,其实这两种都不行。
1会把非JSON格式的数据(func, undefined等)丢失
2除非循环的执行,否则内部的引用变量还是会被改变

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题