浅拷贝和深拷贝只是针对于引用数据类型而言
浅拷贝:
概念:浅拷贝只是复制指向某个对象的指针,而不复制对象本身,新旧对象其实还是同一个对象。修改时原对象也会受到影响。
方法:
- 利用 = 赋值操作符实现浅拷贝。
- 使用 slice、concat 是数组的浅拷贝。
- 对象浅拷贝 - Object.assign()。
- 对象浅拷贝 - 扩展运算符
深拷贝:
概念:深拷贝就是在拷贝数据的时候,将数据的所有引用结构都拷贝一份。简单的说就是,在内存中存在两个数据结构完全相同又相互独立的数据,将引用型类型进行复制,而不是只复制其引用关系。修改时原对象不再受到任何影响。
方法:
- 利用 JSON 对象中的 parse 和 stringify---如果对象某个属性值是函数的话,这个函数的值不能被深拷贝
- 利用递归来实现每一层都重新创建对象并赋值。
- lodash