**浅拷贝实现方法:**
1. Object.assign
- Object.assign是一个浅拷贝,它只是在**根属性**(对象的第一层级)创建了一个新的对象,但是对于属性的值是仍是对象的话依然是浅拷贝
- 不会拷贝对象继承的属性
- 不可枚举的属性
- 可以拷贝Symbol类型
2. 扩展运算符、slice、concat
- 和assgin一样只拷贝一层
**深拷贝实现方法:**
1. 循环+递归
- 只能实现object、array的深拷贝
- for...in 无法获得 Symbol 类型的键,而 Reflect 可以获取
2. JSON.stringify
- 拷贝的对象的值中如果有函数,undefined,symbol则经过JSON.stringify()序列化后的JSON字符串中这个键值对会消失
- 无法拷贝不可枚举的属性, 无法拷贝对象的原型链
- 拷贝Date引用类型会变成字符串
- 拷贝RegExp引用类型会变成空对象
- 对象中含有NaN、 Infinity和 - Infinity, 则序列化的结果会变成null
- 无法拷贝对象的循环应用(即obj[key] = obj)
3. lodash([第三方库]