Há 20 anos oferecendo as melhores soluções!

O que é JavaScript Object.assign()

O JavaScript Object.assign() é um método que permite a cópia de propriedades de um ou mais objetos para um objeto de destino. Ele é amplamente utilizado na programação JavaScript para combinar objetos e criar novos objetos com propriedades de outros objetos. Neste artigo, vamos explorar em detalhes como o Object.assign() funciona e como ele pode ser usado para melhorar a eficiência e a organização do código.

O que é o Object.assign()?

O Object.assign() é um método estático do objeto global Object no JavaScript. Ele foi introduzido na especificação ECMAScript 2015 (também conhecida como ES6) e é suportado por todos os navegadores modernos. O método recebe um objeto de destino e um ou mais objetos de origem como argumentos e retorna o objeto de destino com as propriedades dos objetos de origem copiadas para ele.

Como usar o Object.assign()?

Para usar o Object.assign(), primeiro precisamos criar um objeto de destino vazio ou com algumas propriedades iniciais. Em seguida, passamos o objeto de destino como o primeiro argumento do método, seguido pelos objetos de origem que queremos copiar as propriedades. O método retorna o objeto de destino atualizado com as propriedades dos objetos de origem.

Veja um exemplo básico:

“`javascript
const destino = {};
const origem1 = { propriedade1: ‘valor1’ };
const origem2 = { propriedade2: ‘valor2’ };

Object.assign(destino, origem1, origem2);

console.log(destino);
// Output: { propriedade1: ‘valor1’, propriedade2: ‘valor2’ }
“`

Neste exemplo, criamos um objeto de destino vazio e duas origens com diferentes propriedades. Em seguida, usamos o Object.assign() para copiar as propriedades das origens para o objeto de destino. O console.log() exibe o objeto de destino atualizado com todas as propriedades.

Cópia profunda vs. cópia rasa

Quando usamos o Object.assign() para copiar objetos, é importante entender a diferença entre cópia profunda e cópia rasa. A cópia profunda cria uma cópia completa do objeto de origem, incluindo todas as propriedades e subpropriedades, enquanto a cópia rasa cria uma cópia superficial, copiando apenas as propriedades de nível superior.

Por exemplo:

“`javascript
const origem = { propriedade1: { subpropriedade1: ‘valor1’ } };
const destino = {};

Object.assign(destino, origem);

console.log(destino);
// Output: { propriedade1: { subpropriedade1: ‘valor1’ } }
“`

Neste exemplo, a cópia rasa copia apenas a propriedade de nível superior “propriedade1” para o objeto de destino. No entanto, a subpropriedade “subpropriedade1” é apenas uma referência ao objeto de origem e não é copiada. Isso significa que qualquer alteração na subpropriedade no objeto de destino também afetará o objeto de origem.

Para realizar uma cópia profunda, podemos usar o método JSON.parse() e JSON.stringify() em combinação com o Object.assign(). Veja o exemplo:

“`javascript
const origem = { propriedade1: { subpropriedade1: ‘valor1’ } };
const destino = {};

Object.assign(destino, JSON.parse(JSON.stringify(origem)));

console.log(destino);
// Output: { propriedade1: { subpropriedade1: ‘valor1’ } }
“`

Neste exemplo, usamos o JSON.stringify() para converter o objeto de origem em uma string JSON e, em seguida, o JSON.parse() para converter a string JSON de volta em um objeto. O Object.assign() é usado para copiar as propriedades do objeto convertido para o objeto de destino. Isso cria uma cópia profunda do objeto de origem, incluindo todas as propriedades e subpropriedades.

Usando o Object.assign() para mesclar objetos

Além de copiar propriedades de objetos, o Object.assign() também pode ser usado para mesclar objetos, combinando suas propriedades em um único objeto. Isso é útil quando queremos criar um novo objeto com propriedades de vários objetos existentes.

Veja um exemplo:

“`javascript
const objeto1 = { propriedade1: ‘valor1’ };
const objeto2 = { propriedade2: ‘valor2’ };
const objeto3 = { propriedade3: ‘valor3’ };

const objetoMesclado = Object.assign({}, objeto1, objeto2, objeto3);

console.log(objetoMesclado);
// Output: { propriedade1: ‘valor1’, propriedade2: ‘valor2’, propriedade3: ‘valor3’ }
“`

Neste exemplo, criamos três objetos diferentes e, em seguida, usamos o Object.assign() para mesclar suas propriedades em um novo objeto chamado objetoMesclado. O console.log() exibe o objetoMesclado com todas as propriedades dos objetos originais.

Evitando a mutação de objetos de origem

Quando usamos o Object.assign() para copiar propriedades de objetos, é importante lembrar que ele não cria uma cópia profunda das propriedades. Isso significa que qualquer alteração nas propriedades do objeto de destino também afetará o objeto de origem.

Para evitar a mutação de objetos de origem, podemos passar um objeto vazio como o primeiro argumento do Object.assign(). Isso garante que o método crie um novo objeto de destino sem afetar os objetos de origem.

Veja um exemplo:

“`javascript
const origem = { propriedade1: ‘valor1’ };
const destino = Object.assign({}, origem);

destino.propriedade1 = ‘novoValor’;

console.log(origem);
// Output: { propriedade1: ‘valor1’ }
console.log(destino);
// Output: { propriedade1: ‘novoValor’ }
“`

Neste exemplo, criamos um objeto de origem com uma propriedade e usamos o Object.assign() para copiar a propriedade para um novo objeto de destino. Em seguida, alteramos o valor da propriedade no objeto de destino. O console.log() exibe o objeto de origem com o valor original e o objeto de destino com o novo valor.

Conclusão

O JavaScript Object.assign() é uma ferramenta poderosa para copiar propriedades de objetos e mesclar objetos em JavaScript. Ele oferece uma maneira eficiente e organizada de trabalhar com objetos, melhorando a reutilização de código e a legibilidade. Ao entender como usar o Object.assign() corretamente e evitar mutações indesejadas, você pode aproveitar ao máximo esse método e otimizar seu código JavaScript.