Maison > interface Web > js tutoriel > Maîtriser Object.freeze() et Object.seal() en JavaScript : contrôler la mutabilité des objets

Maîtriser Object.freeze() et Object.seal() en JavaScript : contrôler la mutabilité des objets

Barbara Streisand
Libérer: 2024-12-28 17:58:18
original
366 Les gens l'ont consulté

Mastering Object.freeze() and Object.seal() in JavaScript: Controlling Object Mutability

Object.freeze et Object.seal en JavaScript

Lorsque vous travaillez avec des objets en JavaScript, contrôler leur mutabilité est essentiel pour éviter des modifications involontaires. Deux méthodes fournies par JavaScript à cet effet sont Object.freeze() et Object.seal(). Comprendre leurs différences et leurs cas d'utilisation est essentiel pour écrire un code robuste.


1. Objet.freeze()

La méthode Object.freeze() rend un objet immuable. Cela signifie :

  • Aucune nouvelle propriété ne peut être ajoutée.
  • Les propriétés existantes ne peuvent pas être modifiées, supprimées ou reconfigurées.
  • L'objet est effectivement "gelé" et ne peut en aucun cas être modifié.

Syntaxe :

Object.freeze(obj);
Copier après la connexion
Copier après la connexion

Exemple :

const obj = { name: "Alice", age: 25 };
Object.freeze(obj);

obj.age = 30; // Does nothing (strict mode: throws an error)
obj.gender = "female"; // Does nothing (strict mode: throws an error)
delete obj.name; // Does nothing (strict mode: throws an error)

console.log(obj); // { name: "Alice", age: 25 }
Copier après la connexion
Copier après la connexion

Cas d'utilisation :

  • Pour garantir qu'un objet reste constant tout au long de votre programme, comme les paramètres de configuration.

Vérifier si un objet est gelé :

Utilisez Object.isFrozen() pour déterminer si un objet est gelé :

console.log(Object.isFrozen(obj)); // true
Copier après la connexion
Copier après la connexion

2. Objet.seal()

La méthode Object.seal() restreint les modifications à un objet mais est moins stricte que Object.freeze(). Il permet :

  • Modification des propriétés existantes (les valeurs peuvent changer).
  • Prévention de l'ajout ou de la suppression de propriétés.

Syntaxe :

Object.seal(obj);
Copier après la connexion

Exemple :

const obj = { name: "Bob", age: 30 };
Object.seal(obj);

obj.age = 35; // Allowed: Existing properties can be modified
obj.gender = "male"; // Does nothing (strict mode: throws an error)
delete obj.name; // Does nothing (strict mode: throws an error)

console.log(obj); // { name: "Bob", age: 35 }
Copier après la connexion

Cas d'utilisation :

  • Lorsque vous souhaitez protéger la structure d'un objet (empêcher les ajouts/suppressions) tout en autorisant les modifications des valeurs des propriétés.

Vérifier si un objet est scellé :

Utilisez Object.isSealed() pour déterminer si un objet est scellé :

Object.freeze(obj);
Copier après la connexion
Copier après la connexion

3. Différences clés entre Object.freeze() et Object.seal()

Fonctionnalité Object.freeze() Object.seal() ête> Ajouter de nouvelles propriétés
Feature Object.freeze() Object.seal()
Add new properties Not allowed Not allowed
Remove existing properties Not allowed Not allowed
Modify existing properties Not allowed Allowed
Reconfigure property descriptors Not allowed Not allowed
Use case Immutable objects (constants) Restrict structure but allow value changes
Interdit
Interdit

Supprimer les propriétés existantes Interdit Interdit

Modifier les propriétés existantes Interdit Autorisé

Reconfigurer les descripteurs de propriétés Interdit Interdit
const obj = { name: "Alice", age: 25 };
Object.freeze(obj);

obj.age = 30; // Does nothing (strict mode: throws an error)
obj.gender = "female"; // Does nothing (strict mode: throws an error)
delete obj.name; // Does nothing (strict mode: throws an error)

console.log(obj); // { name: "Alice", age: 25 }
Copier après la connexion
Copier après la connexion
Cas d'utilisation Objets immuables (constantes) Restreindre la structure mais autoriser les modifications de valeurs

4. Objets imbriqués gelés et scellés
console.log(Object.isFrozen(obj)); // true
Copier après la connexion
Copier après la connexion

Object.freeze() et Object.seal() sont peu profond, ce qui signifie qu'ils n'affectent pas les objets imbriqués. Pour geler ou sceller profondément un objet, vous devez appliquer la méthode de manière récursive à chaque objet imbriqué.

  1. Exemple (effet peu profond) :
  2. Fonction d'aide au gel profond :
  3. 5. Pièges et conseils courants

Comportement en mode non strict

 : en mode non strict, les modifications apportées aux objets gelés ou scellés échouent silencieusement. Utilisez toujours le mode strict ("use strict" ;) pour un débogage plus clair.

Evitez toute confusion grâce à la mutabilité des objets : documentez clairement quand et pourquoi un objet est gelé ou scellé pour éviter les interprétations erronées dans les environnements d'équipe.

Sceller avant de geler

 : Si vous souhaitez à la fois une structure restreinte et une immuabilité, scellez d'abord l'objet, puis congelez-le.
Conclusion Object.freeze() et Object.seal() sont des outils précieux pour gérer l'immuabilité des objets en JavaScript. Alors que Object.freeze() garantit une immuabilité totale, Object.seal() offre de la flexibilité en autorisant la modification des valeurs de propriétés existantes. Le choix de la bonne méthode dépend du niveau de contrôle dont vous avez besoin sur vos objets. Bonjour, je m'appelle Abhay Singh Kathayat ! Je suis un développeur full-stack avec une expertise dans les technologies front-end et back-end. Je travaille avec une variété de langages et de frameworks de programmation pour créer des applications efficaces, évolutives et conviviales. N'hésitez pas à me contacter à mon e-mail professionnel : kaashshorts28@gmail.com.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:dev.to
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal