李维亮_前端开发攻城狮 - javascript 对象（object）合并
type: channel
link: https://www.liweiliang.com/tag/javascript-%E5%AF%B9%E8%B1%A1-object-%E5%90%88%E5%B9%B6/
items: Javascript 对象（object）合并

Javascript 对象（object）合并
type: item
date: 2016-11-16T16:25:00+08:00
description: 对象的合并需求：设有对象 o1 ,o2,需要得到对象 o3var o1 = { a:'a' }, o2 = { b:'b' }; // 则 var o3 = { a:'a', b:'b' } 方法1：使用JQuery的extend方法 **方法定义**：jQuery.extend([deep], target, object1, [objectN]) > 用一个或多个其他对象来扩展一个对象，返回被扩展的对象。 > 如果不指定target，则给jQuery命名空间本身进行扩展。这有助于插件作者为jQuery增加新方法。 如果第一个参数设置为true，则jQuery返回一个深层次的副本，递归地复制找到的任何对象(递归合并)。否则的话，副本会与原对象共享结构。 未定义的属性将不会被复制，然而从对象的原型继承的属性将会被复制。o3 = $.extend(o1, o2) // 合并 o1 和 o2， 将结果返回给 o3. 注意： 此时，o1 == o3! 即 o1 被修改 // 或 o3 = $.extend({}, o1, o2) // 合并 o1 和 o2， 将结果返回给 o3. 注意： 此时，o1 ！= o3! 即 o1 没有被修改 方法2：用 Object.assign();var o1 = { a: 1 }; var o2 = { b: 2 }; var o3 = { c: 3 }; var obj = Object.assign(o1, o2, o3); console.log(obj); // { a: 1, b: 2, c: 3 } console.log(o1); // { a: 1, b: 2, c: 3 }, 注意目标对象自身也会改变。 方法3：遍历赋值法 代码逻辑： 循环对象n中的每一个对应属性。确认对象n中存在该属性确认对象o中不存在该属性var extend=function(o,n){ for (var p in n){ if(n.hasOwnProperty(p) && (!o.hasOwnProperty(p) )) o[p]=n[p]; } }; 类似于直接赋值增加属性：o3=o1; o3['b']='b'; // o3 ={ o1:'a', o2:'b' };