对象的合并及拷贝
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表示深复制
对象深拷贝,拷贝后的对象与原对象互不影响