0
votes

Est-ce que JavaScript est vraiment constant? à Redux?

J'ai ce réducteur dans mon magasin, où l'état initial initialProcessingstate code> est importé à partir d'un autre fichier source.

const _initialProcessingState = initialProcessingState;


2 commentaires

Les constantes JavaScript ne sont pas les mêmes que dans d'autres langues. Les constantes ne sont pas immuables. Si votre constante fait référence à un objet ou à un tableau, l'objet peut être modifié, vous ne pouvez tout simplement pas réaffecter le const.


Pour clarifier ceci: ce qui est constant à propos d'un const est la référence à l'objet / valeur. Cela ne peut pas être changé. L'objet lui-même et ses propriétés peuvent être mutés. Pensez const biologiquefather = {...}; c'est constant, cela ne changera jamais. biologiquefather.facialhair n'est pas constant. Et tous les changements s'appliqueront à / être visibles à tous ceux qui lui ont fait référence.


4 Réponses :


1
votes

La valeur de initialProcessingstate est une référence à un objet. Cette valeur ne peut pas changer.

L'objet IT Références peut être muté .


0 commentaires

4
votes

La déclaration de const crée une référence en lecture seule à une valeur. Ce ne signifie pas que la valeur qu'il conserve est immuable, juste que la variable L'identifiant ne peut pas être réaffecté. Par exemple, dans le cas où le contenu est un objet, cela signifie que le contenu de l'objet (par exemple, son les propriétés) peuvent être modifiées.

Source: https: //developer.mozilla .org / fr-nous / docs / Web / JavaScript / Référence / Déclarations / Const

Modifier

Il pourrait être important de mentionner objet.freezez () comme @APOLO a souligné dans son commentaire.

Objets

La méthode Object.freeze () gèle un objet. Un objet gelé ne peut pas plus longtemps être changé; geler un objet empêche de nouvelles propriétés de être ajouté à celui-ci, les propriétés existantes d'être supprimées, empêchent Modification de l'énumérabilité, de la configurabilité ou de l'écriture de propriétés existantes et empêche les valeurs des propriétés existantes d'être changé. De plus, la congélation d'un objet empêche également son prototype d'être changé.

avec objet.frez () Cependant, il est également important de noter qu'il n'est pas étendu aux valeurs que l'objet congelé détient:

Notez que les valeurs [d'objets] qui sont des objets peuvent toujours être modifiées, à moins qu'ils sont également gelés.

Tableaux

En tant qu'objet, un tableau peut être congelé; Après cela, ses éléments ne peut pas être modifié et aucun élément ne peut être ajouté à ou retiré de la Array.

source dans la section edit https://developer.mozilla.org/en-us/docs/web/javascript/Reference/global_Objects/Object/freeze


1 commentaires

Serait bien d'ajouter un mot sur objet.freeze pour ceux qui recherchent des moyens de créer des objets immutables ( développeur.mozilla.org/fr/docs/web/javascript/reference/... )



1
votes

const signifie que la référence ne peut pas être réaffectée. C'est pourquoi, dans le cas de l'attribution de chaînes ou de chiffres, ils restent immuables, mais lors de l'attribution d'objets et de tableaux, son contenu peut être modifié par leur référence, ce qui ne les rend pas immuables.


0 commentaires

0
votes

de MDN :

La déclaration de const crée une référence en lecture seule à une valeur. Ce ne signifie pas que la valeur qu'il conserve est immuable, juste que la variable L'identifiant ne peut pas être réaffecté. Par exemple, dans le cas où le contenu est un objet, cela signifie que le contenu de l'objet (par exemple, son les propriétés) peuvent être modifiées. P> blockQuote> xxx pré>

vous pouvez regarder Object.frez , mais cela ne gèle que le premier niveau: P>

p>

const foo = Object.freeze({
  bar : 'baz',
  baz : { foo : 'bar'}
});

foo.bar = 'foo'; // will not change since foo is frozen
foo.baz.foo = 'foo';  // will change, since foo.baz is not frozen 
console.dir(foo) 


0 commentaires