const newObj = JSON.parse(JSON.stringify(oldObj))(简单版本)
- 这个拷贝比较局限
- 无法对函数和正则对象进行拷贝
- 对象有循环引用,会报错
深拷贝(面试够用)
function deepClone(source) {
// 如果是Null 或者 值类型 直接抛出
if (!source && typeof source !== 'object') {
throw new Error('error arguments', 'deepClone')
}
const targetObj = source.constructor === Array ? [] : {}
// Object.key 进行枚举
Object.keys(source).forEach(keys => {
// 如果不为null 且类型是object的继续递归
if (source[keys] && typeof source[keys] === 'object') {
targetObj[keys] = deepClone(source[keys])
} else {
// 如果是Null 或者 值类型 就重新命名空间
targetObj[keys] = source[keys]
}
})
return targetObj
}