JavaScript的深拷贝

最近有一道面试题关于JavaScript的对象深拷贝 - 学习一下写个总结:

平时也会遇到一个对象赋值给另一个变量时候,算不算拷贝呢,如果对象属性有 function 之类的呢,或者引用其他变量会怎么样呢?

首先我们说一下,JavaScript的变量类型有 基本数据类型或者引用数据类型;

总结:

有3种方法可以实现对象的深度拷贝,但是是有条件的哦
1、json.parse( json.stringify )
2、object.assign
3、递归深度拷贝(基本数据类型就赋值否则继续递归赋值)

优缺点: 

1 json.parse对于无法序列化的,有些会抛出异常,有些会丢失,哪些无法序列化呢:set\map \function\undefined\symbol这几种是无法序列化的;

2 object.assign倒是完美一些,即使function还有set什么的都可以拿到,但是对于引用的,如果拷贝的对象里面有一个属性值是另一个对象,那么这一个

属性值其实拷贝的还是引用的指针,也就是说拷贝的依然是对象的引用(对引用的拷贝);

3 递归深度拷贝的话其实看你怎么写哈哈哈(其实就是递归校验对象属性值,如果是基本数据类型就直接赋值如果不是的话,则递归赋值);

 

感谢:

https://juejin.cn/post/6844904042322198541

https://www.liaoxuefeng.com/wiki/1022910821149312/1023024181109440

posted @ 2021-05-06 16:37  许伟强  阅读(106)  评论(0编辑  收藏  举报