JavaScript Object.assign()

Object.assign() 方法将给定对象的所有可枚举属性复制到一个对象并返回该对象。

示例

const obj1 = { a: 1 };
const obj2 = { b: 2 };
const obj3 = { c: 3 };

// combine all the properties of // obj1, obj2, obj3 into a single object const mergedObj = Object.assign(obj1, obj2, obj3);
console.log(mergedObj); // Output: { a: 1, b: 2, c: 3 }

assign() 语法

assign() 方法的语法是:

Object.assign(target, ...sources)

这里,assign() 是一个静态方法。因此,我们需要使用类名 Object 来访问该方法。


assign() 参数

assign() 方法接受:

  • target - 我们将从中复制 sources 所有属性的目标对象。
  • sources - 我们希望复制其属性的源对象。

assign() 返回值

assign() 方法返回 target 对象。

注意:如果 target 对象中的属性与 sources 中的属性具有相同的键,则 sources 中的属性会覆盖 target 中的属性。


示例 1:Javascript Object.assign() 克隆对象

// create source object
const obj = {
  name: "Alan Turing",
  age: 20,
};

// create target object
let newObject = {};

// copy enumerable properties of obj to newObject // newObject is returned and stored in copy object const copy = Object.assign(newObject, obj);
// print the copy object console.log(copy); // Output: { name: 'Alan Turing', age: 20 } // print newObject console.log(newObject); // Output: { name: 'Alan Turing', age: 20 }

在上面的示例中,我们使用 assign() 方法将 obj 的内容分配给 newObject

由于 assign() 修改目标对象并返回同一对象,因此 copynewObject 彼此都是克隆。因此,当我们打印两者时,会得到相同的输出。


示例 2:assign() 合并对象

// source objects
const o1 = { a: 1, b: 2, c: 3 };
const o2 = { b: 12, c: 13 };
const o3 = { c: 23 };

// merge o1, o2, and o3 // earlier source keys are overwritten by later sources const o4 = Object.assign({}, o1, o2, o3);
console.log(o4); // Output: { a: 1, b: 12, c: 23 }

在上面的示例中,我们使用 assign() 将对象 o1o2o3 合并到一个新对象 o4 中。

const o4 = Object.assign({}, o1, o2, o3);

使用空对象 {} 作为目标对象可确保其他对象的属性被复制到一个新对象,而不会修改任何源对象。

从输出可以看出,后续对象的属性会覆盖先前对象的属性。例如,

  • o1 中的 b 键被 o2 中的对应键覆盖。
  • o1o2 中的 c 键被 o3 中的对应键覆盖。

注意:如果源值是对对象的引用,它只会复制引用值。


另请阅读

你觉得这篇文章有帮助吗?

我们的高级学习平台,凭借十多年的经验和数千条反馈创建。

以前所未有的方式学习和提高您的编程技能。

试用 Programiz PRO
  • 交互式课程
  • 证书
  • AI 帮助
  • 2000+ 挑战