Object.assign是JavaScript中的一个静态方法,用于将一个或多个源对象的所有可枚举属性复制到目标对象。如果目标对象中有与源对象相同的属性,则源对象的属性会覆盖目标对象的同名属性。该方法返回目标对象。
基本用法
Object.assign(target, ...sources)
- target:目标对象,复制属性到此对象。
- sources:一个或多个源对象,其属性将被复制到目标对象。
示例
-
目标对象和源对象没有同名属性:
var source = {state: 'single'}; var result = Object.assign(target, source); console.log(target, target === result); // {name: 'guxin', age: 18, state: 'single'}, true```
-
目标对象和源对象有同名属性:
var source = {age: 22}; var result = Object.assign(target, source); console.log(target); // {name: 'guxin', age: 22}```
-
有多个源对象:
var source1 = {age: 22}; var source2 = {name: 'newName'}; var result = Object.assign(target, source1, source2); console.log(target); // {name: 'newName', age: 22}```
注意事项和常见问题
- 原始类型:原始类型(如字符串、数字、布尔值)会被包装为对象。
-
undefined和null:如果
Object.assign
的参数是undefined
或null
,则会报错,因为这些值无法转换为对象。 -
深拷贝:
Object.assign
只进行浅拷贝,不会复制源对象的引用类型属性中的对象。如果需要深拷贝,可以使用其他方法如JSON.parse(JSON.stringify(obj))
。