- Object.assign() 是浅拷贝,会覆盖重复的键值
当源对象和目标对象中存在相同的键值时,Object.assign() 会用源对象的键值覆盖目标对象的键值。如果源对象中有嵌套对象的话,那么只是将嵌套对象的引用拷贝到目标对象。
- Object.assign() 只能拷贝可枚举对象
Object.assign() 只能拷贝源对象中可枚举的自身属性。如果源对象中有不可枚举的属性或继承的属性,则不会被拷贝到目标对象中。
- Object.assign() 不会拷贝函数
Object.assign() 会拷贝源对象中的属性,但不会拷贝函数。如果源对象中有函数类型的属性,那么在拷贝到目标对象中时将会被忽略掉。
- Object.assign() 无法拷贝源对象的原型链上的属性
Object.assign() 只能拷贝源对象自身的属性,无法拷贝源对象的原型链上的属性。如果想要拷贝原型链上的属性,可以使用 Object.getOwnPropertyDescriptors() 方法。
- Object.assign() 无法拷贝 Symbol 类型的属性
Symbol 类型的属性无法被枚举,因此 Object.assign() 无法拷贝 Symbol 类型的属性。
- Object.assign() 不改变目标对象的__proto__属性
Object.assign() 不会改变目标对象的 proto 属性,也就是说,目标对象的原型对象不会改变。某些情况下,这会导致一些问题。例如,如果源对象和目标对象都有相同的属性,且源对象的原型对象也有相同的属性,那么在使用 Object.assign() 进行拷贝时,目标对象中的属性会被源对象的属性覆盖,而源对象原型对象中的属性则不会被拷贝到目标对象中。