Un ordinateur portable affichant du code sur l'écran.

Protéger et sécuriser les objets en JavaScript

Publié le

Lors du développement en JavaScript, il est parfois nécessaire de restreindre les modifications sur des objets. Les méthodes Object.freeze() et Object.seal() offrent des manières différentes de protéger un objet. Comprendre ces méthodes et leurs limitations est crucial pour écrire un code robuste et éviter les effets de bords non désirés.

Object.freeze() : rendre un objet immuable

La méthode Object.freeze() permet de geler un objet, c’est-à-dire de rendre ses propriétés immuables et de bloquer toute modification.

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

obj.nom = "Bob"; // Ignoré ou erreur en mode strict
obj.nouvellePropriete = "valeur"; // Ignoré
console.log(obj.nom); // Affiche "Alice"

Que signifie geler un objet ?

  • Interdiction de modifier : Les propriétés existantes ne peuvent pas être modifiées, ajoutées ou supprimées.
  • Immuabilité superficielle : Seules les propriétés directes de l’objet sont gelées. Si une propriété est un objet, elle peut toujours être modifiée.

Exemple de gel superficiel

const obj = { details: { nom: "Alice" } };
Object.freeze(obj);

obj.details.nom = "Bob"; // Modifiable, car obj.details n'est pas gelé
console.log(obj.details.nom); // Affiche "Bob"

Vérifier si un objet est gelé

La méthode Object.isFrozen() permet de déterminer si un objet est gelé :

const obj = { nom: "Alice" };
console.log(Object.isFrozen(obj)); // Affiche false

Object.freeze(obj);
console.log(Object.isFrozen(obj)); // Affiche true

Object.seal() : restreindre les modifications sans bloquer les mises à jour

La méthode Object.seal() empêche l’ajout ou la suppression de propriétés, mais permet encore de modifier les valeurs des propriétés existantes.

const obj = { nom: "Alice" };
Object.seal(obj);

obj.nom = "Bob"; // Modifiable
obj.nouvellePropriete = "valeur"; // Ignoré
delete obj.nom; // Ignoré
console.log(obj.nom); // Affiche "Bob"

Vérifier si un objet est scellé

Pour savoir si un objet est scellé, utilisez Object.isSealed() :

const obj = { nom: "Alice" };
console.log(Object.isSealed(obj)); // Affiche false

Object.seal(obj);
console.log(Object.isSealed(obj)); // Affiche true

Différences entre Object.freeze() et Object.seal()

  • Object.freeze(): Les propriétés sont totalement immuables. Aucune modification n’est permise.
  • Object.seal(): Les propriétés existantes sont modifiables, mais aucune nouvelle propriété ne peut être ajoutée ou supprimée.

Comparaison

  • Modification d'une valeur existante :
    • Object.freeze() : Non
    • Object.seal() : Oui
  • Ajout de nouvelles propriétés :
    • Object.freeze() : Non
    • Object.seal() : Non
  • Suppression de propriétés existantes :
    • Object.freeze() : Non
    • Object.seal() : Non

Cas d’utilisation

  • Object.freeze(): Utile pour garantir l’immutabilité des configurations ou des constantes partagées.
  • Object.seal(): Idéal pour restreindre les modifications structurelles tout en permettant des mises à jour des valeurs.

Conclusion

Les méthodes Object.freeze() et Object.seal() permettent de mieux contrôler la mutabilité des objets en JavaScript. Comprendre leurs différences et leurs limitations, notamment la notion de gel ou de scellage superficiel, est essentiel pour les utiliser efficacement dans vos projets.

Sources

Mots clés

JavaScript
Un ordinateur portable sur un bureau émettant une lumière bleue, créant une ambiance moderne et technologique. Ecouter les événements du DOM avec addEventListener

Découvrez comment utiliser addEventListener en JavaScript pour cibler des éléments du DOM, écouter leurs événements et leur affecter des fonctions.

Tableau de bord avec des graphiques et des documents Calculer des mesures statistiques en JavaScript

Découvrez comment calculer des mesures statistiques comme la moyenne, la médiane, le mode, la variance, l'écart-type, la plage et la somme des carrés.

Coaching

À partir de 29€
  • Optimisation de code
  • Bonnes pratiques de développement
  • Montée en compétences rapide
Réserver une session