1、浅拷贝
浅拷贝只复制某个对象的引用,而不复制对象本身,新旧对象还是共享同一块内存
2、深拷贝
深拷贝会创造一个一摸一样的对象,新对象和原对象不共享内存,修改新对象不会改变原对对象。
二、方法
1、浅拷贝
a、Object.assign()
Object.assign()方法可以把任意多个的源对象自身的可枚举属性拷贝给目标对象,然后返回目标对象。Object.assign()拷贝的是对象的属性的引用,而不是对象本身。
2、深拷贝
a、JSON转换
let newObj = JSON.parse(JSON.stringify(obj));
缺点:
- 如果对象有函数,函数无法被拷贝下来
2)无法拷贝对象原型链上的属性和方法
3)当数据的层次很深,会栈溢出
b、递归函数
function deepClone(obj){
let tempObj = obj.constructor ===Array ? [] : {}
for (let keys in obj) {
if(obj.hasOwnProperty(keys)) {
if (obj[keys] && typeof obj[keys] === "object") {
tempObj[keys] = deepClone(obj[keys])
} else {
tempObj[keys] = obj[keys]
}
}
}
return tempObj
}
缺点:
1)无法保存引用
2)当数据层次很深,会栈溢出