Object.isFrozen()

El método Object.isFrozen() determina si un objeto está congelado.

Síntaxis

Object.isFrozen(obj)

Parametros

obj

El objeto a ser revisado.

Descripción

Un objeto está congelado si y solo si no es extendible, todas sus propiedades son no-configurables, y todos los datos de sus propiedades no tienen capacidad de escritura.

Ejemplos

js
// Un objeto nuevo es extendible, así que no está congelado.
Object.isFrozen({}); // === false

// Un objeto vacio el cuál no es extendible está congelado vacuamente.
var vacuouslyFrozen = Object.preventExtensions({});
Object.isFrozen(vacuouslyFrozen); // === true

// Un objeto nuevo con una propiedad es tabién extendible, ergo no congelado.
var oneProp = { p: 42 };
Object.isFrozen(oneProp); // === false

// Prevenir la extensión de un objeto no lo congela.
// porque la propiedad sigue teniendo capacidad de configuración (y capacidad de escritura).
Object.preventExtensions(oneProp);
Object.isFrozen(oneProp); // === false

// ...pero eliminar la propiedad congela el objeto vacuamente.
delete oneProp.p;
Object.isFrozen(oneProp); // === true

// Un ojbeto no-extendible con una propiedad sin capacidad de escritura pero si con capacidad de configuración no está congelado.
var nonWritable = { e: "plep" };
Object.preventExtensions(nonWritable);
Object.defineProperty(nonWritable, "e", { writable: false }); // Le quita la capacidad de escritura.
Object.isFrozen(nonWritable); // === false

// Quitarle la capacidad de configuración a una propiedad congela el objeto.
Object.defineProperty(nonWritable, "e", { configurable: false }); // le quita la capacidad de configuración.
Object.isFrozen(nonWritable); // === true

// Un objeto no-extendible con una propiedad sin capacidad de configuración pero con capacidad de escritura no congela a dicho objeto.
var nonConfigurable = { release: "the kraken!" };
Object.preventExtensions(nonConfigurable);
Object.defineProperty(nonConfigurable, "release", { configurable: false });
Object.isFrozen(nonConfigurable); // === false

// Quitarle la capacidad de configuración a esa propiedad congela el objeto.
Object.defineProperty(nonConfigurable, "release", { writable: false });
Object.isFrozen(nonConfigurable); // === true

// A non-extensible object with a configurable accessor property isn't frozen.
var accessor = {
  get food() {
    return "yum";
  },
};
Object.preventExtensions(accessor);
Object.isFrozen(accessor); // === false

// ...but make that property non-configurable and it becomes frozen.
Object.defineProperty(accessor, "food", { configurable: false });
Object.isFrozen(accessor); // === true

// But the easiest way for an object to be frozen is if Object.freeze has been called on it.
var frozen = { 1: 81 };
Object.isFrozen(frozen); // === false
Object.freeze(frozen);
Object.isFrozen(frozen); // === true

// By definition, a frozen object is non-extensible.
Object.isExtensible(frozen); // === false

// Also by definition, a frozen object is sealed.
Object.isSealed(frozen); // === true

Notas

En ES5, si el argumento pasado a éste método no es un objeto (primitivo), entonces causará un TypeError. En ES6, un no-objeto pasado como argumento será tratado como si fuera un objeto ordinario congelado, simplemente regresa true.

js
Object.isFrozen(1);
// TypeError: 1 is not an object (ES5 code)

Object.isFrozen(1);
// true                          (ES6 code)

Especificaciones

Specification
ECMAScript Language Specification
# sec-object.isfrozen

Compatibilidad con navegadores

BCD tables only load in the browser

Ver también