拷贝对象后,修改对象的值不影响另一方
浅拷贝只能拷贝一层对象。如果有对象的嵌套,那么浅拷贝将无能为力
深拷贝解决无限层的对象嵌套问题,实现彻底的拷贝
浅拷贝的实现方式
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 = 4console.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 = 2console.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] = 4console.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 = {}
