Copiando valores primitivos, arrays y objetos

Cuando copiamos variables que tienen asignados valores primitivos (números, string, boleanos, undefined y null), las modificaciones en la variable original no afectan a la variable copiada:

En cambio cuando trabajamos con arrays o objetos, las modificaciones se afectan a la variable copiada, porque se hace la copia a la referencia.

Cuando copiamos arrays, las modificaciones en el array original afecta a la variable copiada, para realizar una copia profunda utilizamos el método slice():

En los objetos ocurre lo mismo que en los array y para realizar una copia profunda utilizamos el método Object.assign():

Object.assign() no es efectivo cuando los objetos que se estan copiando contienen objetos:

En tal caso utilizamos JSON.parse(JSON.stringify(obj)). Convertimos el objeto en un string con JSON.stringify() para después volverlo a convertir en objeto JSON.parse().

Este método tampoco es efectivo cuando alguna de las propiedades del objeto es una función.

Otra forma de hacer la copia seria aplicando una funcion recursiva que en el caso de encontrar otro objeto en el objeto realizara otro Object.assign():