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 ? ? ? ? ? ?

Vegeu també

Document Tags and Contributors

Contributors to this page: enTropy
Last updated by: enTropy,