拷贝对象后,修改对象的值不影响另一方
浅拷贝只能拷贝一层对象。如果有对象的嵌套,那么浅拷贝将无能为力
深拷贝解决无限层的对象嵌套问题,实现彻底的拷贝
浅拷贝的实现方式
1.Object.assign
Object.assign拷贝的是对象的属性的引用,而不是对象本身
var obj1 = {'a':1,'b':2,'c':3}
var obj2 = {'a':2,'b':3}
var copy = Object.assign(obj1,obj2)
console.log(copy)
//{a: 2, b: 3, c: 3}
obj1.a = 4
console.log(obj2)
//{a: 2, b: 3}
var obj3 = {
'a':{
'b':'1'
},
'c':{
'd':'2'
}
}
var obj4 = {}
var copy2 = Object.assign(obj4,obj3)
console.log(copy2)
/*
a: {b: 2}
c: {d: "2"}
*/
obj4.a.b = 2
console.log(obj3.a.b) //2
2.concat浅拷贝数组
var arr = [1,2]
var arr2 = arr.concat()
console.log(arr2) //[1,2]
arr2.push(3) //[1,2,3]
var arr3 = [1,[2,3]]
var arr4 = arr3.concat()
arr3[1][1] = 4
console.log(arr4[1][1]) //4
3.slice
4. …展开运算符
更slice是一样的效果
var arr5 = [1,2,3]
var arr6 = [...arr5]
5.手动实现
var arr7 = [] //空数组
var shadowClone = function(target,sources){
for(var prop in sources){
if(target[prop] != sources[prop]){
target[prop] = sources[prop]
}
}
}
var obj5 = {}