深拷贝方法:
- JSON.parse() 和 JSON.stringify()
function deepCopy(obj) {
return JSON.parse(JSON.stringify(obj))
}
缺陷:
当被转化的对象里含有时间对象这种格式的数据会被转化为字符串
当被转化的对象里含有regexp格式这种的数据会被转化为空对象
当被转化的对象里含有function转化后数据会丢失
- 递归
function deepCopy(obj) {
// 没有引用数据类型时停止递归
if (typeof obj !== 'object') return
// 判断是对象还是数组
let newObj = obj instanceof Array ? [] : {}
for (let key in obj) {
// 含有该obj的可枚举属性才进行拷贝
if (obj.hasOwnProperty(key)) {
if (typeof obj[key] === "object") {
newObj[key] = deepCopy(obj[key])
}
else {
newObj[key] = obj[key]
}
}
}
return newObj
}
缺陷:特殊情景下和JOSN方法一样
浅拷贝方法
- 直接赋值
- Object.assign()