assign( {}, { a: 1 }, { b: { c: 2, d: 3} }, { b: { e: 4 } } ) // { a: 1, b: { e: 4 } } merge( {}, { a: 1 }, { b: { c: 2, d: 3} }, { b: { e: 4 } } ) // { a: 1, b: { c: 2, d: 3, e: 4 } } // 合并集合 var users = { 'data': [{ 'user': 'barney' }, { 'user': 'fred' }] }; var ages = { 'data': [{ 'age': 36 }, { 'age': 40 }] }; merge({}, users, ages) // { data: [ { user: 'barney', age: 36 }, { user: 'fred', age: 40 } ] } // merge 函数会修改原来的对象! merge(users, ages) console.log(users) // { data: [ { user: 'barney', age: 36 }, { user: 'fred', age: 40 } ] |
总结
相同之处
- 都可以用来合并对象
- 都会修改原来的对象 (如果原来的对象是作为函数的第一个参数的话)
不同之处
assign函数不会处理原型链上的属性,也不会合并相同的属性,而是用后面的属性值覆盖前面的属性值extend- 3.x 版本中和
assign一样 - 4.x 版本中会合并原型链上的属性
- 3.x 版本中和
merge遇到相同属性名的时候,如果属性值是纯对象或集合的时候,会合并属性值
转载于:https://www.cnblogs.com/General-up/p/7251198.html