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.