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 |
Interditconst 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ésconsole.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é.
- Exemple (effet peu profond) :
-
Fonction d'aide au gel profond :
-
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!