一、浅拷贝:
浅拷贝是指对于一个对象,仅仅是拷贝了它的引用而已,两个对象指向同一块内存地址。
实现方式:
- Object.assign(target, source)
- Array.slice()
- Array.concat()
二、深拷贝:
深拷贝创建一个值和原始对象完全相同的对象,并且是两个不同的对象,修改其中一个对象不会影响另一个对象。
实现方式:
- JSON.parse(JSON.stringify(obj))
缺点:不支持函数、正则、Symbol、Date对象、undefined等类型的转换。
- 递归实现深拷贝
递归实现深度拷贝,判断属性值的类型,如果是引用类型就递归调用拷贝函数,直到全部拷贝完成。
实现代码:
注意事项:
- 对象的循环引用需要特殊处理,否则会导致死循环。
- 需要注意的是,拷贝过程中原对象中的方法将丢失,因为方法不能被序列化,所以 JSON.parse(JSON.stringify(obj)) 方式深拷贝不能用于拷贝带有方法的对象。