[ Web Proxy ]
URL:
Viewing: https://developer.mozilla.org/fr/docs/Web/JavaScript/Reference/Global_Objects/Object/seal [Back]  [Original]

Object.seal() - JavaScript | MDN

Cette page a t traduite partir de l'anglais par la communaut. Vous pouvez contribuer en rejoignant la communaut francophone sur MDN Web Docs.

View in English Always switch to English

Object.seal()

Baseline Large disponibilit

Cette fonctionnalit est bien tablie et fonctionne sur de nombreux appareils et versions de navigateurs. Elle est disponible sur tous les navigateurs depuis juillet 2015.

La mthode Object.seal() scelle un objet afin d'empcher l'ajout de nouvelles proprits, en marquant les proprits existantes comme non-configurables. Les valeurs des proprits courantes peuvent toujours tre modifies si elles sont accessibles en criture.

Dans cet article

Exemple interactif

const object1 = {
  property1: 42,
};

Object.seal(object1);
object1.property1 = 33;
console.log(object1.property1);
// Expected output: 33

delete object1.property1; // Cannot delete when sealed
console.log(object1.property1);
// Expected output: 33

Syntaxe

js
Object.seal(obj);

Paramtres

obj

L'objet sceller. Ce peut tre n'importe quelle valeur qui n'ait pas un type primitif.

Valeur de retour

L'objet qui est scell.

Description

Par dfaut, les objets sont extensibles (ce qui signifie que de nouvelles proprits peuvent leur tre ajoutes). Sceller un objet empche l'ajout de nouvelles proprits et marque les proprits existantes comme non-configurables. Ainsi, l'ensemble de proprits de l'objet devient fix et immuable. Le fait de rendre les proprits non-configurables empche galement de transformer des proprits de donnes en accesseurs et vice versa. Cela n'empche pas de modifier la valeur des proprits. Toute tentative de suppression ou d'ajout de proprits un objet qui est scell, de conversion d'une proprit de donnes en accesseurs ou vice versa chouera, soit de manire silencieuse soit en lanant une exception TypeError (la plupart du temps en mode strict.

La chane de prototypes reste la mme. Cependant, la proprit Object.prototype.__proto__ ( ) est scelle galement.

Exemples

js
var obj = {
  prop: function () {},
  toto: "truc",
};

// On peut ajouter de nouvelles proprits
// Les proprits existantes peuvent tre
// changes ou retires
obj.toto = "machin";
obj.blop = "blip";
delete obj.prop;

var o = Object.seal(obj);

o === obj; // true
Object.isSealed(obj); // true

// On peut toujours changer la valeur
// d'une proprit d'un objet scell
obj.toto = "moh";

// Mais on ne peut pas convertir les donnes
// en accesseurs (ou vice versa)
Object.defineProperty(obj, "toto", {
  get: function () {
    return "g";
  },
});
// lancera une TypeError

// Tout autre changement que celui d'une valeur
// ne fonctionnera pas

obj.coincoin = "mon canard";
// la proprit n'est pas ajoute

delete obj.toto;
// la proprit n'est pas supprime

// ...en mode strict, cela lancera des TypeErrors
function chec() {
  "use strict";
  delete obj.toto; // lance une TypeError
  obj.tutu = "arf"; // lance une TypeError
}
chec();

// L'utilisation de la mthode Object.defineProperty ne fonctionnera pas

Object.defineProperty(obj, "ohai", { value: 17 });
// lance une TypeError

Object.defineProperty(obj, "toto", { value: "eit" });
// modifie une proprit existante

Notes

Pour ES5, si l'argument pass la mthode n'est pas un objet (mais une valeur d'un autre type primitif), cela entranera une exception TypeError. Pour ES2015, un argument qui n'est pas un objet sera trait comme un objet ordinaire scell et la mthode renverra cet objet.

js
Object.seal(1);
// TypeError : 1 n'est pas un objet (code ES5)

Object.seal(1);
// 1 (code ES2015)

Comparaison avec Object.freeze()

Lorsqu'on utilise la mthode Object.freeze(), les proprits existantes d'un objet gel deviennent immuables. En revanche, avec Object.seal(), il est toujours possible de modifier la valeur des proprits existantes d'un objet scell.

Spcifications

Spcification
ECMAScript 2027 LanguageSpecification
# sec-object.seal

Compatibilit des navigateurs

Voir aussi


Web Proxy Viewer  |  New URL  |  Original Page