js合并对象
Object.assign()
方法用于将所有可枚举属性的值从一个或多个源对象复制到目标对象。它将返回目标对象。
语法
Object.assign(target, ...sources);
参数
- target: 目标对象
- sources 源对象
返回值
- 目标对象
示例
<script> let form = {name: 'liming', sex: '男'}; let obj = {class: '一班', age: 15}; console.log('before', form); Object.assign(form, obj); console.log('after', form); </script>
描述
如果目标对象中的属性具有相同的键,则属性将被源中的属性覆盖。后来的源的属性将类似地覆盖早先的属性。
在出现错误的情况下,例如,如果属性不可写,会引发
注意,
Object.assign
方法只会拷贝源对象自身的并且可枚举的属性到目标对象。该方法使用源对象的[[Get]]
和目标对象的[[Set]]
,所以它会调用相关 getter 和 setter。因此,它分配属性,而不仅仅是复制或定义新的属性。如果合并源包含getter,这可能使其不适合将新属性合并到原型中。为了将属性定义(包括其可枚举性)复制到原型,应使用Object.getOwnPropertyDescriptor()
和Object.defineProperty()
。String
类型和Symbol
类型的属性都会被拷贝。在出现错误的情况下,例如,如果属性不可写,会引发
TypeError
,如果在引发错误之前添加了任何属性,则可以更改target
对象。注意,
Object.assign
不会跳过那些值为 [null
] 或 [undefined
]的源对象。