1.浅克隆:只复制一层对象的属性
let arr = ['a','b','c']
方法:
a.let newArr = arr
b.let list = object.assign(arr)
c.let newList = newArr.concat()
console.log(newArr,list,newList)//结果都是['a','b','c']
2.深克隆:本质上是创造一个一样的对象,但是两个对象的引用地址完全不同,也就是一个对象的改变,不会影响到另一个对象
let arr = ['a','b','c']
方法:
let list = JSON.parse(JSON.stringify(arr))
list.push('d')
console.log(arr,list)//['a','b','c'] ['a','b','c','d']
JSON.parse(JSON.stringify())这个方法的弊端,
a.若有时间对象会变成字符串;b.若有函数,正则会得到空对象
c.若有函数,undefined会把函数,undefined丢失
d.若有NaN会变成null e.若对象中存在循环引用也无法正确拷贝
深拷贝的方法:
function checkType(target){
return Object.prototype.toString.call(target).slice(8,-1)
}
function clone(target){
let result,targetType = checkType(target)
if(targetType === 'Object'){
result = {}
}else if(targetType === 'Array'){
result = []
}else{
return target
}
for(let i in target){
var value = target[i]
if(checkType[value] === 'Object' || checkType[value] === 'Array'){
result[i] = clone(value)
}else{
result[i] = value
}
}
return result
}
let arr = [1, 2, { name: "lily" }]
let res = clone(arr)
res.push({ sex: 'nan' })
console.log(res)
浅克隆与深克隆的区别?
最新推荐文章于 2022-07-10 21:55:54 发布