浅拷贝
深拷贝,浅拷贝的根本区别在于 是否开辟新的内存空间存放复制实体.浅拷贝仅仅是指向了原来的对象内存地址..他们互相影响,深拷贝不会.
Object.assign(target,obj1,obj2) 他会把遍历多个源数据的可枚举类型属性。然后把他们合并到target对象上,进行返回
浅拷贝方法:
// 实现的是浅拷贝
var c = {
age: 1,
name: undefined,
sex: null,
tel: /^1[34578]\d{9}$/,
say: () => {
console.log('hahha')
}
}
let b = Object.assign(c)
c.sex = 1
console.log(b.sex) //1
深拷贝的实现
function copy(obj) {
let deep_copy_obj= obj=> {
let new_obj = {}
for (key in obj) {
let dataType = Object.prototype.toString.apply(obj[key])
if (dataType == '[object Object]') {
for (let k in obj[key]) {
new_obj[key] = deep_copy_obj(obj[key])
}
} else if (dataType == '[object Array]') {
new_obj[key] = deep_copy_arr(obj[key])
}
else {
new_obj[key] = obj[key]
}
}
return new_obj
}
let deep_copy_arr= arr=>{
let new_arr = []
arr.forEach((item, i) => {
let dataType = Object.prototype.toString.apply(item)
if (dataType == '[object Array]') {
new_arr[i] = deep_copy_arr(item)
} else if (dataType == '[object Object]') {
new_arr[i] = deep_copy_obj(item)
}
else {
new_arr.push(item)
}
})
return new_arr
}
return deep_copy_obj(obj)
}
网友评论