对象的深浅拷贝:
浅拷贝:浅拷贝只是对对象的引用地址进行了拷贝,并没有开辟新的堆栈,拷贝后,两个对象指向的是同一个引用地址,所以修改其中一个对象的属性,则另一个对象的属性也会改变。
深拷贝则是开启一个新的栈,两个对象对应两个不同的引用地址,修改一个对象的属性,不会改变另一个对象的属性。
1,并非Object.assign方法就是深拷贝,如果对象的键的值是一个对象,就会发生浅拷贝
var obj1={a:1,b:2}
var newObj1 = Object.assign({}, obj1)
obj1.a=0
console.log(obj1) //{a: 0, b: 2}
console.log(newObj1) //{a: 1, b: 2}
//深拷贝
但是当属性的值为对象
var obj2={m:1,n:{s:1}}
var newObj2 = Object.assign({}, obj2)
obj2.n.s=0
console.log(obj2) //s:0
console.log(newObj2) //s:0
//浅拷贝
2,真正的深拷贝
1.JSON.parse方法
var newObj = JSON.parse(JSON.stringify(obj))可以实现对象的深拷贝,但是不可以作用于函数
2.递归
合并数组:
concat
push
reduce
var arr1=[1,2,3,4,5],arr2=[6,7,8,9,10];
arr1 = arr2.reduce( function(coll,item){
coll.push( item );
return coll;
}, arr1 );
console.log(arr1)//[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
push.apply
var arr1=[1,2,3,4,5],arr2=[6,7,8,9,10];
arr1.push.apply(arr1,arr2);
console.log(arr1)//[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]