返回

深挖 JavaScript Object.assign() 方法,轻松拷贝对象属性

前端

JavaScript 中的对象拷贝和合并

在 JavaScript 中,对象是引用类型,这意味着变量存储的并不是对象本身,而是一个指向该对象的引用。因此,当您将一个对象赋值给另一个变量时,实际上是将对该对象的引用复制给了新变量。

这可能会导致一些意外的结果。例如,如果您将一个对象作为参数传递给函数,并在函数内部修改该对象,那么函数外的原始对象也会受到影响。这是因为函数内部的对象实际上是原始对象的引用,因此对它的任何修改都会反映在原始对象上。

为了避免这种情况,我们需要创建原始对象的副本,而不是引用。这可以通过 Object.assign() 方法来实现。

Object.assign() 方法简介

Object.assign() 方法的语法如下:

Object.assign(target, ...sources);

其中,

  • target 是目标对象,用于接收源对象的可枚举属性。
  • sources 是一个或多个源对象,其可枚举属性将被复制到目标对象。

Object.assign() 方法的详细用法

1. 复制单个源对象

如果只有一个源对象,则 Object.assign() 方法的使用非常简单。只需将目标对象和源对象作为参数传递给该方法即可。例如:

const obj1 = { name: 'John', age: 30 };
const obj2 = Object.assign({}, obj1);

console.log(obj2); // { name: 'John', age: 30 }

上面的代码将 obj1 的所有可枚举属性复制到 obj2 中。现在 obj2obj1 的一个副本,对 obj2 的任何修改都不会影响 obj1

2. 复制多个源对象

Object.assign() 方法还可以用于复制多个源对象。只需将多个源对象作为参数传递给该方法即可。例如:

const obj1 = { name: 'John', age: 30 };
const obj2 = { email: 'john@example.com', phone: '555-123-4567' };
const obj3 = Object.assign({}, obj1, obj2);

console.log(obj3); // { name: 'John', age: 30, email: 'john@example.com', phone: '555-123-4567' }

上面的代码将 obj1obj2 的所有可枚举属性复制到 obj3 中。现在 obj3obj1obj2 的一个副本,对 obj3 的任何修改都不会影响 obj1obj2

3. 合并对象

Object.assign() 方法还可以用于合并对象。只需将目标对象和一个或多个源对象作为参数传递给该方法即可。例如:

const obj1 = { name: 'John', age: 30 };
const obj2 = { email: 'john@example.com' };
const obj3 = Object.assign(obj1, obj2);

console.log(obj3); // { name: 'John', age: 30, email: 'john@example.com' }

上面的代码将 obj2 的所有可枚举属性复制到 obj1 中,并覆盖 obj1 中同名的属性。现在 obj3obj1obj2 的一个合并对象,包含了这两个对象的