El mètode Object.isFrozen()
determina si un objecte està congelat.
Sintaxi
Object.isFrozen(obj)
Paràmetres
obj
- L'objecte que es comprovarà si està congelat o no.
Descripció
Un objecte està congelat si i només si no és extensible, cap de les seves propietats és configurable, i cap de les seves propietats de dades (és a dir, propietats que no són accessor amb components getter o setter) that is, properties which are not accessor properties with getter or setter components) es poden escriure (modificar el seu valor).
Exemples
// Els objectes nous són extensibles, així que no estan congelats.
Object.isFrozen({}); // === false
// Un objecte buit que no és extensible està congelat ja que no te propietats que trenquin les restriccions.
var vacuouslyFrozen = Object.preventExtensions({});
Object.isFrozen(vacuouslyFrozen); // === true
// Un objecte nou amb una propietat és extensible, i per tant no està congelat.
var oneProp = { p: 42 };
Object.isFrozen(oneProp); // === false
// Fer-lo no extensible no el fa congelat,
// perquè la propietat encara és configurable (i permet l'escriptura).
Object.preventExtensions(oneProp);
Object.isFrozen(oneProp); // === false
// ...però, un altre cop, si eliminem la propietat ens trobem amb un objecte buit congelat.
delete oneProp.p;
Object.isFrozen(oneProp); // === true
// Un objecte no extensible amb una propietat que no permeti l'escriptura però sí que es configurable no està congelat.
var nonWritable = { e: 'plep' };
Object.preventExtensions(nonWritable);
Object.defineProperty(nonWritable, 'e', { writable: false }); // fer que la propietat no permeti l'escriptura
Object.isFrozen(nonWritable); // === false
// Fer aquesta propietat no configurable fa que l'objecte estigui congelat
Object.defineProperty(nonWritable, 'e', { configurable: false }); // fer la propietat no configurable
Object.isFrozen(nonWritable); // === true
// Un objecte no extensible amb una propietat no configurable però que si permeti l'escriptura tampoc està congelat.
var nonConfigurable = { release: 'the kraken!' };
Object.preventExtensions(nonConfigurable);
Object.defineProperty(nonConfigurable, 'release', { configurable: false });
Object.isFrozen(nonConfigurable); // === false
// Canviar aquesta propietat per a que no permeti l'escriptura fa que l'objecte estigui congelat.
Object.defineProperty(nonConfigurable, 'release', { writable: false });
Object.isFrozen(nonConfigurable); // === true
// Un objecte amb una propietat accessor no extensible no està congelat.
var accessor = { get food() { return 'yum'; } };
Object.preventExtensions(accessor);
Object.isFrozen(accessor); // === false
// ...però si la propietat es fa no configurable l'objecte esdevé congelat.
Object.defineProperty(accessor, 'food', { configurable: false });
Object.isFrozen(accessor); // === true
// La forma més fàcil, però, d'aconseguir congelar un objecte és cridant el mètode Object.freeze al mateix objecte.
var frozen = { 1: 81 };
Object.isFrozen(frozen); // === false
Object.freeze(frozen);
Object.isFrozen(frozen); // === true
// Per definició, un objecte congelat no és extensible.
Object.isExtensible(frozen); // === false
// També per definició, un objecte congelat està segellat.
Object.isSealed(frozen); // === true
Notes
A l'EcmaScript 5, si l'argument passat a aquest mètode no és un objecte (un valor primitiu), llençarà un TypeError
. A l'EcmaScript 6, un argument que no sigui un objecte serà tractat com si fós un objecte congelat ordinari, i simplement el retornarà.
Object.isFrozen(1);
// TypeError: 1 no és un objecte (codi EcmaScript 5)
Object.isFrozen(1);
// true (codi EcmaScript 6)
Especificacions
Especificació | Estat | Comentaris |
---|---|---|
ECMAScript 5.1 (ECMA-262) The definition of 'Object.isFrozen' in that specification. |
Standard | Definició inicial. Implementat a JavaScript 1.8.5. |
ECMAScript 2015 (6th Edition, ECMA-262) The definition of 'Object.isFrozen' in that specification. |
Standard |
Compatibilitat amb navegadors
We're converting our compatibility data into a machine-readable JSON format.
This compatibility table still uses the old format,
because we haven't yet converted the data it contains.
Find out how you can help!
Característica | Chrome | Firefox (Gecko) | Internet Explorer | Opera | Safari |
---|---|---|---|---|---|
Suport bàsic | 6 | 4.0 (2.0) | 9 | 12 | 5.1 |
Característica | Android | Chrome for Android | Firefox Mobile (Gecko) | IE Mobile | Opera Mobile | Safari Mobile |
---|---|---|---|---|---|---|
Suport bàsic | ? | ? | ? | ? | ? | ? |