Object.isFrozen()

Baseline Widely available

This feature is well established and works across many devices and browser versions. It’s been available across browsers since July 2015.

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