浅拷贝:创建一个新对象,如果属性是基本类型,拷贝的就是基本类型的值,如果属性时引用类型的值,拷贝的就是内存你地址,如果其中一个改变了另一个也会改变。
深拷贝:将一个对象从内存中完整的拷贝出来一份,从堆内存中开辟一个新的区域存放新对象,且修改新对象不会影响原对象。
实现浅拷贝的方法
- for···in只循环第一层
- Object.assign方法
- 直接用=赋值
-
实现深拷贝的方法
JSON.parse(JSON.stringify()) 如果obj里有时间对象,时间将以字符串的形式展示,而不是时间对象
- 如果obj里有RegExp、Error对象,结果将只得到空对象
- 如果obj里有函数,undefined,结果会把函数或 undefined丢失
- 如果obj里有NaN、Infinity和-Infinity,结果会变成null
递归
function deepClone(obj) {if (obj === null) return null;if (typeof obj !== "object") return obj;if (obj instanceof RegExp) return new RegExp(obj);if (obj instanceof Date) return new Date(obj);let result = new obj.constructor();for (let key in obj) {if (obj.hasOwnProperty(key)) {result[key] = deepClone(obj[key]);}}return result;}
