这个链接https://www.javascripttutorial.net/object/3-ways-to-copy-objects-in-javascript/#:~:text=To%20copy%20an%20object%20in%20JavaScript%2C%20you%20have,the%20JSON.stringify%20%28%29%20and%20JSON.parse%20%28%29%20methods.%20提到了3个方法, 然而2个都是有问题的, 并不能深度复制.

...大法. 不行.

> a = {a:{a:{a:1}}}
{ a: { a: { a: 1 } } }
> b = {...a}
{ a: { a: { a: 1 } } }
> b
{ a: { a: { a: 1 } } }
> a.a.a.a = 2
2
> b
{ a: { a: { a: 2 } } }
>

Object.assign大法, 还是不行.

> b = Object.assign({},a)
{ a: { a: { a: 2 } } }
> a.a.a.a  = 3
3
> b
{ a: { a: { a: 3 } } }

最后唯有JSON.parse/stringify大法可用了,但是感觉好粗犷...

> b = JSON.parse(JSON.stringify(a))
{ a: { a: { a: 3 } } }
> a.a.a.a = 4
4
> b
{ a: { a: { a: 3 } } }

终极对比文章,如何深度复制对象和数组 https://javascript.plainenglish.io/how-to-deep-copy-objects-and-arrays-in-javascript-7c911359b089

此文验证过, 真正正确的文章.
看完发现, 没有js原生的方案进行深度复制...

这篇文章 https://blog.logrocket.com/methods-for-deep-cloning-objects-in-javascript/ 也提出了几个新方法.

其中提到了v8原生的深度copy方式. node中也支持

const structuredClone = obj => {
  return v8.deserialize(v8.serialize(obj));
};

标签: none 阅读量: 1463

添加新评论