5.4 Caractère dynamique des objets
Une caractéristique fondamentale des objets en JavaScript : ils sont dynamiques. Une fois créés, on peut toujours leur ajouter de nouvelles propriétés ou méthodes, ou supprimer celles qui existent déjà. C'est très différent des langages où la forme d'un objet est figée par sa classe.
Ajouter et supprimer des membres
Partons d'un objet circle qui n'a qu'une propriété radius. Rien n'empêche d'y ajouter ensuite une propriété color, puis une méthode draw. À l'inverse, on peut retirer un membre avec l'opérateur delete.
const circle = { radius: 1 };
circle.color = 'yellow';
circle.draw = function() { console.log('draw'); };
delete circle.color;
delete circle.draw;
console.log(circle); // { radius: 1 }
Le piège apparent de const
Un point qui déroute beaucoup de développeurs : ici, on a déclaré circle avec const, et pourtant on a modifié l'objet à plusieurs reprises. Comment est-ce possible ?
La réponse est subtile. const empêche la réaffectation de la variable, c'est-à-dire de faire pointer circle vers un autre objet. Mais ça n'empêche pas du tout de modifier le contenu de l'objet vers lequel circle pointe. Si on tentait circle = {}, on obtiendrait l'erreur classique « assignment to constant variable ». En revanche, ajouter ou supprimer des propriétés reste parfaitement autorisé.
Cette distinction entre variable constante et objet immuable est essentielle. Pour vraiment empêcher la modification d'un objet, JavaScript propose Object.freeze(), mais c'est un sujet pour plus tard. Pour l'instant, retenez surtout que les objets en JavaScript sont des structures vivantes que vous pouvez faire évoluer dynamiquement, même quand la référence est déclarée avec const.