Em geral, clonar significa copiar um valor para outro. Em JavaScript, fazemos clonagem, ou seja, copiamos um valor para outro usando JavaScript. Para ser mais preciso, são dois tipos de clonagem em JavaScript. Como um programador, pode ser um iniciante ou veterano, ele / ela deve ser capaz de saber as diferenças entre clone profundo e clone raso. Como este artigo é sobre clones Deep, estudaremos detalhes sobre clones Deep. A clonagem é um conceito que pode acontecer em qualquer tipo de dados, ou seja, pode ser um tipo de dados primitivo (como string, número) ou tipos de dados compostos como arrays e JavaScript. Portanto, para dominá-lo, precisamos ser claros com o fundamento.

Clone profundo: Clone profundo é uma técnica que é usada para duplicar tudo sempre que estamos clonando arrays, JavaScript para evitar perda de dados.

Exemplo 1: Como neste exemplo, os dados estão sendo corrompidos se alterarmos o valor de um objeto, então ele está refletindo em outros objetos também. Essa é a razão para evitar esse problema, usamos o Deep Clone.

<script>
    var student1 ={ 
        name : "Manish",
        company : "Gfg"
  
    }
  
    var student2 =  student1  ;
  
    student1.name = "Rakesh"
      
    console.log("student 1 name is",student1.name)
    console.log("student 2 name is ",student2.name);
</script>

Saída:

Exemplo 2: Usando o Spread Operator

<script>
    var student1 ={  
    name : "Manish",
    company : "Gfg"
  
    }
  
    var student2 =  { ...student1 } ;
  
    student1.name = "Rakesh"
  
    console.log("student 1 name is",student1.name)
    console.log("student 2 name is ",student2.name);
</script>

Saída:
 

Exemplo 3: Usando Object.assign()

<script>
    var student1 ={ 
    name : "Manish",
    company : "Gfg"
    }
  
    var student2 = Object.assign( {} ,student1) ;
  
    student1.name = "Rakesh"
  
    console.log("student 1 name is",student1.name)
    console.log("student 2 name is ",student2.name);
</script>

Saída:

Exemplo 4: usando Json.parse e Json.stringfy

<script>
    var student1 ={ 
    name : "Manish",
    company : "Gfg"
  
    }
  
    var student2 = JSON.parse(JSON.stringify(student1))
  
    student1.name = "Rakesh"
  
    console.log("student 1 name is",student1.name)
    console.log("student 2 name is ",student2.name);
</script>

Saída:

Conclusão: podemos usar todas essas abordagens para garantir que os dados estejam seguros e não sofram mutação quando alteramos um objeto.