Object.assign()是ES6中新增的一个API,它的作用是用来实现对象的浅拷贝,把源对象(source)的所有可枚举属性,复制到目标对象(target)中。
使用方法
Object.assign()接收两个及以上参数,第一个参数是目标对象,后面的参数都是源对象。
const target = { a: 1 }; const source1 = { b: 2 }; const source2 = { c: 3 }; Object.assign(target, source1, source2); console.log(target); // { a: 1, b: 2, c: 3 }
Object.assign()会把源对象的所有可枚举属性,复制到目标对象中,如果目标对象中已经存在同名属性,则会被源对象中的属性覆盖。
const target = { a: 1, b: 1 }; const source1 = { b: 2, c: 2 }; Object.assign(target, source1); console.log(target); // { a: 1, b: 2, c: 2 }
原理
Object.assign()的原理是,遍历源对象中的所有属性,如果属性是可枚举的,就把它复制到目标对象上,如果属性是不可枚举的,就跳过。
- 1. 检查第一个参数是否是对象,如果不是,则抛出错误。
- 2. 遍历源对象中的所有属性。
- 3. 如果属性是可枚举的,则复制到目标对象上。
- 4. 如果属性是不可枚举的,则跳过。
- 5. 如果目标对象中已经存在同名属性,则会被源对象中的属性覆盖。
Object.assign()只能实现对象的浅拷贝,而不能实现深拷贝,如果源对象的属性值是对象,则复制的只是这个对象的引用,而不是实际的对象。