Freeze superficial vs congelamento profundo em JavaScript

Freeze superficial vs congelamento profundo em JavaScript
Em JavaScript, o congelamento raso e as abordagens de congelamento profundo tornam um objeto imutável/não modificável. Mas por que alguém deveria usar congelamento superficial ou congelamento profundo? Bem! Em JavaScript, tudo é um objeto, e todos sabemos que os objetos em JavaScript são mutáveis ​​(modificáveis). Mas e se alguém quiser tornar os objetos imutáveis ​​(não modificáveis)?

Existem várias maneiras de tornar um objeto imutável, como usar a palavra -chave "const", congelamento raso e congelamento profundo.

Este artigo tem como objetivo apresentar um entendimento claro dos seguintes conceitos:

  • Qual é a necessidade de congelamento raso?
  • O que significa congelamento raso em javascript?
  • Qual é a necessidade de congelamento profundo em javascript?
  • O que significa congelamento profundo em javascript?
  • Implementação prática do congelamento profundo em JavaScript.

Vamos entender cada um dos conceitos mencionados acima através de exemplos práticos. Então vamos começar!

Qual é a necessidade de um congelamento raso?

Os motivos abaixo listados nos obrigam a implementar o congelamento superficial ou o congelamento profundo:

  • Tudo gira em torno dos objetos em JavaScript.
  • Objetos em JavaScript são mutáveis ​​(modificáveis).
  • Uma maneira de tornar um objeto imutável é usar a palavra -chave "const".
  • Um objeto declarado com a palavra -chave "const" não pode ser modificado/transferido. No entanto, suas propriedades podem ser modificadas/transferidas.
  • Então, e se alguém quiser bloquear/congelar um objeto completamente?
  • Bem! O conceito de congelamento superficial pode ser usado nesses casos.

Exemplo: Identificação do Problema

Este programa identificará por que o “const”A palavra -chave não é uma boa abordagem para tornar os objetos imutáveis.

const empidetails = primeiro: "Alex", segundo: "John", terceiro: "Mike", quarto: "Joe", quinto: "Seth";
console.log ("valores originais do objeto:", empatetails);
EmpDetails.terceiro = "Ambrose";
console.log ("valores de objeto modificado:", empatetails);
  • Em primeiro lugar, criamos um objeto usando a palavra-chave “const” e atribuímos alguns pares de valor-chave.
  • Em seguida, imprimimos os valores originais do objeto.
  • Depois, modificamos o valor da "terceira" chave.
  • Finalmente, imprimimos os valores de objeto modificado usando o “console.registro()".

A saída verificou que a palavra -chave "const" falhou em impedir que um objeto fosse modificado. A abordagem de congelamento superficial pode ser usada para resolver/corrigir este problema.

O que significa congelamento raso em javascript?

O objeto.o método Freeze () pode congelar completamente um objeto. O objeto.O método Freeze () restringe um usuário de adicionar, excluir ou modificar o objeto. Além disso, restringe os usuários de acessar os métodos/propriedades existentes de um objeto.

Exemplo: implementação do objeto.Método Freeze ()
Vamos considerar o código abaixo para obter uma compreensão básica do objeto.Método Freeze ():

const empidetails = primeiro: "Alex", segundo: "John", terceiro: "Mike", quarto: "Joe", quinto: "Seth";
console.log ("valores originais do objeto:", empatetails);
Objeto.congelamento (EmpDetails);
EmpDetails.terceiro = "Ambrose";
excluir empdetails;
console.log ("valores de objeto modificado:", empatetails);
  • Usamos o objeto.Método Freeze () para congelar o objeto "EmpDetails".
  • Em seguida, imprimimos os valores originais do objeto “EmpDetails”.
  • Posteriormente, tentamos atualizar a propriedade “Terceira” do objeto “EmpDetails”…
  • Em seguida, utilizamos o operador de exclusão para excluir a propriedade "terceira".
  • Finalmente, imprimimos os "valores de objetos modificados" usando o console.Método log ().

A saída esclareceu que o objeto.O método Freeze () não permite modificações no objeto.

Qual é a necessidade do congelamento profundo em JavaScript?

O exemplo acima mostra que a abordagem de congelamento superficial impede com sucesso o objeto de modificar. Ainda assim, não é considerado a melhor abordagem. Isso ocorre porque a abordagem de congelamento superficial apenas congela o objeto fornecido. No entanto, se o objeto contiver alguns objetos ou matrizes aninhados, em tais situações, os objetos aninhados ainda poderão ser atualizados.

Então, como lidar com objetos aninhados? Bem! Nesse caso, podemos usar o conceito de congelamento profundo.

O que significa congelamento profundo em javascript?

Você deve seguir as etapas listadas abaixo para aplicar o congelamento profundo a um objeto:

  • Temos que congelar todas as propriedades recursivamente.
  • Para fazer isso, primeiro, verifique se o valor de qualquer propriedade é um objeto ou não.
  • Se o valor de qualquer propriedade for um objeto, verifique se está congelado.
  • Se o valor de qualquer propriedade for um objeto e ainda não estiver congelado, invocar o método de congelamento nessa propriedade recursivamente.
  • Dessa forma, você pode criar um objeto imutável.

Implementação prática do congelamento profundo em JavaScript

O programa abaixo dado permitirá que você entenda como congelar profundamente um objeto no JavaScript:

const empDetails =
Primeiro: "Alex",
Segundo: "John",
Terceiro: "Mike",
Quarto: ["Joe", "Dean"],
Quinto: "Seth"
;
const Deepf = (EmpDetails) =>
Objeto.Chaves (EmpDetails).foreach ((objprop) =>
se (
TIPO DE EMPDETAILS [OBJPROP] === "Objeto" &&
!Objeto.Isfrozen (Empdetails [objprop])
)
Deepf (EmpDetails [objProp]);
);
objeto de retorno.congelamento (EmpDetails);
;
Deepf (EmpDetails);
console.log ("valores originais do objeto:", empatetails);
Objeto.congelamento (EmpDetails);
EmpDetails.Quarto [0] = "Ambrose";
console.log ("valores de objeto modificado:", empatetails);

Neste programa, adotamos a abordagem recursiva para congelar a propriedade de todos os objetos. Para fazer isso, inicialmente, verificamos se o valor de qualquer propriedade é um objeto ou não. Quando descobrimos que uma propriedade é um objeto, verificamos se está congelado ou não. Se o valor de qualquer propriedade for um objeto e ainda não estiver congelado, então invocamos o objeto.Freeze () Método nessa propriedade recursivamente.

A partir da saída acima, fica claro que a abordagem de congelamento profundo impede que o objeto seja modificado.

Conclusão

Em JavaScript, o congelamento raso e as abordagens de congelamento profundo tornam um objeto imutável/não modificável. A diferença entre congelamento superficial e congelamento profundo é que o congelamento raso não lida com os objetos/matrizes aninhados. Por outro lado, a abordagem de congelamento profundo pode ser usada para congelar completamente um objeto, incluindo os objetos/matrizes aninhados. Este artigo explicou o funcionamento de congelamento superficial e congelamento profundo com a ajuda de exemplos adequados.