返回

手把手教你玩转Object.assign()函数,让复制对象轻松简单

前端

Object.assign()函数的用法

Object.assign()函数的语法如下:

Object.assign(target, ...sources)

其中:

  • target 是目标对象,也就是要被复制属性的对象。
  • ...sources 是源对象,可以有多个,也就是要被复制属性的对象。

Object.assign()函数会将源对象的所有可枚举属性的值复制到目标对象,同时返回目标对象。如果目标对象已经存在与源对象相同的属性,则目标对象的属性值将被源对象的属性值覆盖。

Object.assign()函数的注意事项

在使用Object.assign()函数时,需要注意以下几点:

  • Object.assign()函数只会复制源对象的可枚举属性的值。不可枚举属性的值不会被复制。
  • Object.assign()函数不会复制源对象的Symbol属性的值。
  • Object.assign()函数不会复制源对象的getter和setter方法。
  • Object.assign()函数不会修改源对象。
  • Object.assign()函数返回的是目标对象,而不是源对象。

Object.assign()函数的示例代码

下面我们通过一些示例代码来演示Object.assign()函数的用法:

// 示例 1:将一个源对象复制到另一个对象

const sourceObject = {
  name: 'John',
  age: 30,
  city: 'New York'
};

const targetObject = {};

Object.assign(targetObject, sourceObject);

console.log(targetObject);
// 输出:{ name: 'John', age: 30, city: 'New York' }
// 示例 2:将多个源对象复制到一个对象

const sourceObject1 = {
  name: 'John',
  age: 30
};

const sourceObject2 = {
  city: 'New York'
};

const targetObject = {};

Object.assign(targetObject, sourceObject1, sourceObject2);

console.log(targetObject);
// 输出:{ name: 'John', age: 30, city: 'New York' }
// 示例 3:将一个源对象的属性复制到另一个对象的特定属性上

const sourceObject = {
  name: 'John',
  age: 30,
  city: 'New York'
};

const targetObject = {
  fullName: 'John Doe'
};

Object.assign(targetObject, { name: sourceObject.name });

console.log(targetObject);
// 输出:{ fullName: 'John Doe', name: 'John' }

Object.assign()函数与扩展运算符(...)的比较

Object.assign()函数和扩展运算符(...)都可以用来复制对象,但两者之间有一些区别。

  • Object.assign()函数只会复制源对象的可枚举属性的值,而扩展运算符会复制源对象的所有属性的值,包括不可枚举属性的值和Symbol属性的值。
  • Object.assign()函数不会修改源对象,而扩展运算符会修改源对象。
  • Object.assign()函数返回的是目标对象,而扩展运算符返回的是一个新的对象。

总结

Object.assign()函数是一个非常有用的函数,它可以轻松地将所有可枚举属性的值从一个或多个源对象复制到目标对象。在使用Object.assign()函数时,需要注意一些注意事项,以便更好地使用该函数。