一、Object.assign()
1、初次了解
Object.assign() 方法将所有可枚举(Object.propertyIsEnumerable() 返回 true)和自有(Object.hasOwnProperty() 返回 true)属性从一个或多个源对象复制到目标对象,返回修改后的对象。
const target = { a: 1, b: 2 };
const source = { b: 4, c: 5 };
const returnedTarget = Object.assign(target, source);
console.log(target);
// expected output: Object { a: 1, b: 4, c: 5 }
console.log(returnedTarget);
// expected output: Object { a: 1, b: 4, c: 5 }
2、语法
Object.assign(target, ...sources)
target目标对象,接收源对象属性的对象,也是修改后的返回值。sources源对象,包含将被合并的属性。返回值目标对象。
3、描述
1、如果目标对象与源对象具有相同的KEY的时候,则目标对象中的属性将被源对象中的属性覆盖掉,后面的源对象属性将类似的覆盖钱买你的对象属性。
2、Object.assign方法指挥拷贝源对象可枚举和自身的属性到目标对象。该方法适应了源对象的get和目标对象的set,它会调用getters和setters,所以它分配属性,而不仅仅是赋值或者定义新属性。如果合并包括getters,这可能使其将新属性合并到原型中。
3、为了将属性定义(包括其可枚举性)复制到原型,应使用Object.getOwnPropertyDescriptor() 和 Object.defineProperty(),基本类型 String 和 Symbol 的属性会被复制。
4、如果赋值期间出错,例如如果属性不可写,则会抛出 TypeError;如果在抛出异常之前添加了任何属性,则会修改 target 对象(译者注:换句话说,Object.assign() 没有“回滚”之前赋值的概念,它是一个尽力而为、可能只会完成部分复制的方法)。