这是一种合并两个工具的不可变方法,也便是说,用于合并的初始两个工具不会由于副浸染而以任何办法改变。末了,我们得到了一个新工具,它由这两个工具布局而成,而它们仍旧保持完全。
我们创建两个工具并合并它们:
constperson={name:"前端小智",age:24}constjob={title:"前端开拓",location:"厦门"}constemployee={...person,...job};console.log(employee);
运行结果:

{name:'前端小智',age:24,title:'前端开拓',location:'厦门'}
把稳:如果这两个工具之间有共同的属性,例如它们都有location,则第二个工具(job)的属性将覆盖第一个工具(person)的属性:
constperson={name:"前端小智",location:"北京"}constjob={title:"前端开拓",location:"厦门"}constemployee={...person,...job};console.log(employee);
运行结果:
{name:'前端小智',location:'厦门',title:'前端开拓'}
如果要合并两个以上的工具,最右边的工具将覆盖左边的工具。
利用 Object.assign() 合并JavaScript工具并两个或多个工具的另一种常用方法是利用内置的Object.assign()方法:
Object.assign(target,source1,source2,...);
此方法将一个或多个源工具中的所有属性复制到目标工具中。就像扩展操作符一样,在覆盖时,将利用最右边的值:
constperson={name:"前端小智",location:"北京",};constjob={title:"前端开拓",location:"厦门",};constemployee=Object.assign(person,job);console.log(employee);
运行结果:
{name:'前端小智',age:24,location:'厦门',title:'前端开拓'}
同样,请记住employee引用的工具是一个全新的工具,不会链接到person或job引用的工具。
浅合并和深合并在浅合并的情形下,如果源工具上的属性之一是另一个工具,则目标工具将包含对源工具中存在的同一工具的引用。在这种情形下,不会创建新工具。
我们调度前面的person工具,并将location作为工具本身
constperson={name:"JohnDoe",location:{city:"London",country:"England"}}constjob={title:"Fullstackdeveloper"}constemployee={...person,...job};console.log(employee.location===person.location);
运行结果:
true
我们可以看到person和employee工具中对location工具的引用是相同的。事实上,spread操作符(...)和Object.assign() 都是浅合并。
JavaScript没有现成的深合并支持。然而,第三方模块和库确实支持它,比如Lodash的.merge。
总结本文中,我们演示在如何在 JS 中合并两个工具。先容了spread操作符(...)和Object.assign()方法,它们都实行两个或多个工具的浅合并到一个新工具中,而不会影响组成部分。
~完,我是刷碗智,我要去刷碗了,我们下期见!