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

O que é JavaScript Shallow Copy

O que é JavaScript Shallow Copy

O JavaScript é uma linguagem de programação amplamente utilizada para desenvolvimento web. Uma das características poderosas do JavaScript é a capacidade de copiar objetos e arrays. No entanto, existem diferentes tipos de cópias, incluindo a cópia rasa (shallow copy) e a cópia profunda (deep copy). Neste glossário, vamos nos concentrar na cópia rasa e explorar o que é o JavaScript Shallow Copy e como ele funciona.

Entendendo a cópia rasa

A cópia rasa, também conhecida como cópia superficial, é um tipo de cópia que cria uma nova referência para o objeto ou array original. Isso significa que, ao fazer uma cópia rasa, as alterações feitas na cópia também afetarão o objeto ou array original e vice-versa.

Em JavaScript, a cópia rasa é realizada usando o operador de atribuição (=) ou o método Object.assign(). Vamos explorar cada um desses métodos em detalhes.

Usando o operador de atribuição (=)

O operador de atribuição (=) é usado para atribuir um valor a uma variável. No caso da cópia rasa, podemos usar o operador de atribuição para criar uma nova referência para o objeto ou array original.

Por exemplo, considere o seguinte código:

const originalArray = [1, 2, 3];

const shallowCopyArray = originalArray;

Neste exemplo, estamos criando uma cópia rasa do array original usando o operador de atribuição. Agora, se fizermos uma alteração em qualquer um dos arrays, a alteração será refletida em ambos:

shallowCopyArray[0] = 4;

console.log(originalArray); // Output: [4, 2, 3]

Como podemos ver, a alteração feita no shallowCopyArray também afetou o originalArray. Isso ocorre porque ambos estão apontando para a mesma referência de memória.

Usando o método Object.assign()

O método Object.assign() é outra maneira de realizar uma cópia rasa em JavaScript. Este método cria uma cópia superficial de um objeto ou array, copiando todas as propriedades enumeráveis do objeto de origem para o objeto de destino.

Por exemplo, vamos considerar o seguinte código:

const originalObject = { name: "John", age: 30 };

const shallowCopyObject = Object.assign({}, originalObject);

Aqui, estamos usando o método Object.assign() para criar uma cópia rasa do objeto original. Agora, se fizermos uma alteração em qualquer um dos objetos, a alteração será refletida em ambos:

shallowCopyObject.age = 40;

console.log(originalObject); // Output: { name: "John", age: 40 }

Assim como no exemplo anterior, a alteração feita no shallowCopyObject também afetou o originalObject.

Quando usar a cópia rasa

A cópia rasa pode ser útil em certas situações, especialmente quando você deseja economizar memória e tempo de processamento. No entanto, é importante estar ciente de suas limitações.

Uma das principais limitações da cópia rasa é que ela não lida bem com objetos ou arrays aninhados. Se o objeto ou array original contiver outros objetos ou arrays, a cópia rasa criará novas referências apenas para os objetos ou arrays de nível superior, mantendo as referências internas intactas.

Por exemplo, considere o seguinte código:

const originalNestedArray = [[1, 2], [3, 4]];

const shallowCopyNestedArray = originalNestedArray;

Aqui, estamos criando uma cópia rasa do array original que contém outros arrays aninhados. Se fizermos uma alteração em um dos arrays internos, a alteração será refletida em ambos:

shallowCopyNestedArray[0][0] = 5;

console.log(originalNestedArray); // Output: [[5, 2], [3, 4]]

Como podemos ver, a alteração feita no shallowCopyNestedArray também afetou o originalNestedArray. Isso ocorre porque a cópia rasa não cria novas referências para os arrays internos.

Conclusão

Em resumo, o JavaScript Shallow Copy é um tipo de cópia que cria uma nova referência para o objeto ou array original. Isso significa que as alterações feitas na cópia também afetarão o objeto ou array original e vice-versa. A cópia rasa pode ser realizada usando o operador de atribuição (=) ou o método Object.assign(). No entanto, é importante estar ciente de suas limitações, especialmente quando se lida com objetos ou arrays aninhados.