La méthode Object.isFrozen()
permet de déterminer si un objet est gelé.
Syntaxe
Object.isFrozen(obj)
Paramètres
obj
- L'objet dont on souhaite vérifier s'il est gelé.
Valeur de retour
Un booléen qui indique si oui ou non l'objet passé en argument est gelé.
Description
Un objet est gelé si et seulement s'il n'est pas extensible, que toutes ses propriétés sont non-configurables et que ses propriétés de données (c'est-à-dire les propriétés qui ne sont pas des accesseurs ou des mutateurs) sont non-accessibles en écriture.
Exemples
// Un objet nouvellement créé est extensible et est donc dégelé Object.isFrozen({}); // false // Un objet vide et non extensible est gelé var videGelé = Object.preventExtensions({}); Object.isFrozen(videGelé); // true // Un nouvel objet avec une propriété est extensible et donc dégelé var uneProp = { p: 42 }; Object.isFrozen(uneProp); // false // Si on empêche d'étendre un objet non vide, cela ne le rend pas gelé // car la propriété est toujours configurable (et accessible en écriture) Object.preventExtensions(uneProp); Object.isFrozen(uneProp); // false // ...si on supprime la seule propriété existante en revanche, on a bien un objet gelé delete uneProp.p; Object.isFrozen(uneProp); // true // Un objet non-extensible et avec une propriété non-accessible en écriture mais toujours configurable // n'est pas gelé var nonWritable = { e: "plep" }; Object.preventExtensions(nonWritable); Object.defineProperty(nonWritable, "e", { writable: false }); // on la rend non accessible en écriture Object.isFrozen(nonWritable); // false // Si on rend la propriété non-configurable, l'objet devient gelé Object.defineProperty(nonWritable, "e", { configurable: false }); // on la rend non-configurable Object.isFrozen(nonWritable) === true); // Un objet non-extensible avec une propriété non-configurable mais accessible en écriture n'est pas gelé var nonConfigurable = { release: "the kraken!" }; Object.preventExtensions(nonConfigurable); Object.defineProperty(nonConfigurable, "release", { configurable: false }); Object.isFrozen(nonConfigurable); // false // Si cette propriété devient non accessible en écriture, l'objet est gelé Object.defineProperty(nonConfigurable, "release", { writable: false }); Object.isFrozen(nonConfigurable); // true // Un objet non-extensible avec un accesseur configurable n'est pas gelé var accesseur = { get manger() { return "miam"; } }; Object.preventExtensions(accesseur); Object.isFrozen(accesseur); // false // ...si on rend la propriété non-configurable, l'objet est gelé. Object.defineProperty(accesseur, "manger", { configurable: false }); Object.isFrozen(accesseur); // true // La façon la plus simple est d'utiliser la méthode Object.freeze var gelé = { 1: 81 }; Object.isFrozen(gelé); // false Object.freeze(gelé); Object.isFrozen(gelé); // true // Par définition, un objet gelé est non-extensible. Object.isExtensible(gelé); // false // Par définition, un objet gelé est scellé. Object.isSealed(gelé); // true
Notes
Pour ES5, si l'argument passé à la méthode n'est pas un objet (mais est d'un autre type primitif), cela entraînera une exception TypeError
. Pour ES6, un argument qui n'est pas un objet sera traité comme s'il était un objet gelé et la méthode renverra true
.
Object.isFrozen(1); // TypeError: 1 n'est pas un objet (code ES5) Object.isFrozen(1); // true (code ES6)
Spécifications
Spécification | État | Commentaires |
---|---|---|
ECMAScript 5.1 (ECMA-262) La définition de 'Object.isFrozen' dans cette spécification. |
Standard | Définition initiale. Implémentée par JavaScript 1.8.5. |
ECMAScript 2015 (6th Edition, ECMA-262) La définition de 'Object.isFrozen' dans cette spécification. |
Standard | |
ECMAScript 2017 Draft (ECMA-262) La définition de 'Object.isFrozen' dans cette spécification. |
Projet |
Compatibilité des navigateurs
Fonctionnalité | Chrome | Firefox (Gecko) | Internet Explorer | Opera | Safari |
---|---|---|---|---|---|
Support simple | 6 | 4.0 (2.0) | 9 | 12 | 5.1 |
Fonctionnalité | Android | Chrome for Android | Firefox Mobile (Gecko) | IE Mobile | Opera Mobile | Safari Mobile |
---|---|---|---|---|---|---|
Support simple | ? | ? | ? | ? | ? | ? |
Voir aussi
Étiquettes et contributeurs liés au document
Étiquettes :
Contributeurs à cette page :
SphinxKnight
Dernière mise à jour par :
SphinxKnight,