对象的合并及拷贝

1、$.extend()

var obj1 = { 'a': 1 };
var obj2 = { 'b': 2 };
var c = $.extend(obj1, obj2); // c = { 'a': 1, 'b': 2 } obj1 和 obj2 也同时被修改了 var c = $.extend({}, obj1, obj2); // c = { 'a': 1, 'b': 2 } obj1 和 obj2 没有被修改

 

2、for (var key in arr)

var obj1 = { 'a': 1 };
var obj2 ={ 'b': 2, 'c': 3 };
for(var key in obj2) {
  if(obj2.hasOwnProperty(key) === true){
//此处hasOwnProperty是判断自有属性,和 in 运算符不同,该方法会忽略掉那些从原型链上继承到的属性。 obj1[key] = obj2[key]; } } console.log(obj1); //{'a':1,'b':2,'c':3};

 

3、Obj.assign() 

var o1 = { a: 1 };
var o2 = { b: 2 };
 
var obj = Object.assign(o1, o2);
console.log(obj); // { a: 1, b: 2 }  原对象随之发生改变

var obj = Object.assign({}, o1, o2);
console.log(obj); // { a: 1, b: 2 }  原对象不改变

 

4、对象浅拷贝

var obj1={'a':1};
var obj2={'b':{'b1':22,'b2':33}};

$.extend(obj1, obj2);   //obj1拷贝了obj2的属性

  对象浅拷贝,只是拷贝了对象的存储地址,当原对象(或拷贝后的对象)发生改变时,拷贝后的对象(原对象)也会随之发生改变

 

5、对象深拷贝

var obj1={'a':1};
var obj2={'b':{'b1':22,'b2':33}};

$.extend(true, obj1, obj2);   //第一个参数设为true表示深复制

  对象深拷贝,拷贝后的对象与原对象互不影响

posted @ 2019-01-29 11:26  爱学习的吴小瑞  阅读(313)  评论(0编辑  收藏  举报