2019-11-20

对象的深浅拷贝:

浅拷贝:浅拷贝只是对对象的引用地址进行了拷贝,并没有开辟新的堆栈,拷贝后,两个对象指向的是同一个引用地址,所以修改其中一个对象的属性,则另一个对象的属性也会改变。
深拷贝则是开启一个新的栈,两个对象对应两个不同的引用地址,修改一个对象的属性,不会改变另一个对象的属性。
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]

你可能感兴趣的:(2019-11-20)