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