理解
深拷贝:拷贝了数据之后原数据变了,目标数据不变
浅拷贝: 拷贝了数据之后原数据变了,目标数据跟着变化
注:以上理解为个人的理解,如需深入了解请百度查找
function checkType(data) {
return Object.prototype.toString.call(data).slice(8, -1).toLowerCase()
}
function fest() {}
function deepClone(target) {
let targetType = checkType(target)
let result
if(targetType === 'object') {
result = {}
} else if(targetType === 'array') {
result = []
} else {
return target
}
for(let i in target) {
let value = target[i]
let valueType = checkType(value)
if(valueType === 'object' || valueType === 'array') {
result[i] = deepClone(value)
} else {
result[i] = value
}
}
return result
}
let arr1 = { a: { b: 1,c: 2 }, n: [1,2,3] }
let arr2 = Object.assign(arr1)
let arr3 = deepClone(arr1)
arr1.a = 'zzzz'
console.log(arr2); //打印 { a: 'zzzz', n: [1,2,3] }
console.log(arr3); //打印 { a: { b: 1,c: 2 }, n: [1,2,3] }
总结:深拷贝使用deepClone方法(自行封装),浅拷贝直接用Object.assign即可。