Object.freeze y seal
Impida cambios en los objetos.
Object.freeze y seal es una lección gratuita de JavaScript Academy en CoddyKit. Esta es la lección 1 de 4. Puedes leer la lección completa abajo gratuitamente — luego la practicas en el navegador con un editor de código integrado y un tutor de IA 24/7. Forma parte de la ruta de aprendizaje de JavaScript Academy, y tu progreso se sincroniza en la web y la app de CoddyKit. El curso de JavaScript Academy incluye 4 lecciones en total.
¿Por qué congelar objetos?
La inmutabilidad significa que los datos no pueden cambiar después de su creación. Evita mutaciones accidentales, facilita el razonamiento sobre el código y previene toda una clase de errores.
JavaScript proporciona Object.freeze y Object.seal para bloquear los objetos.
Conceptos básicos de Object.freeze
Object.freeze convierte un objeto en uno completamente de solo lectura: no puede añadir, eliminar ni cambiar propiedades. Devuelve el mismo objeto, ahora congelado.
const user = Object.freeze({ name: 'Ada', age: 36 });
user.age = 99;
console.log(user.age);Comprobación con isFrozen
Object.isFrozen indica si un objeto está congelado. Es útil antes de intentar actualizarlo.
const config = Object.freeze({ debug: false });
const settings = { theme: 'dark' };
console.log(Object.isFrozen(config));
console.log(Object.isFrozen(settings));Fallo silencioso frente a fallo en modo estricto
En código que no está en modo estricto, las escrituras en un objeto congelado fallan de forma silenciosa. En modo estricto provocan un TypeError. En cualquier caso, el valor nunca cambia.
'use strict';
const frozen = Object.freeze({ x: 1 });
try {
frozen.x = 2;
} catch (e) {
console.log(e.name);
}
console.log(frozen.x);freeze impide añadir propiedades
Congelar también impide añadir propiedades. La nueva clave simplemente no aparece.
const point = Object.freeze({ x: 0 });
point.y = 5;
console.log(point.y);
console.log(Object.keys(point));freeze impide eliminar propiedades
Tampoco puede eliminar propiedades de un objeto congelado. La propiedad permanece en su lugar.
const obj = Object.freeze({ keep: 'me' });
delete obj.keep;
console.log(obj.keep);Object.seal es diferente
Object.seal es menos estricto que freeze. No puede añadir ni eliminar propiedades, pero todavía puede cambiar los valores existentes.
const sealed = Object.seal({ count: 1 });
sealed.count = 2;
sealed.extra = 3;
console.log(sealed.count);
console.log(sealed.extra);Comprobación con isSealed
Object.isSealed indica si un objeto está sellado. Tenga en cuenta que todo objeto congelado también está sellado, pero no al contrario.
const sealed = Object.seal({ a: 1 });
const frozen = Object.freeze({ b: 2 });
console.log(Object.isSealed(sealed));
console.log(Object.isSealed(frozen));
console.log(Object.isFrozen(sealed));Resumen de freeze frente a seal
freeze: no permite añadir, eliminar ni cambiar. seal: no permite añadir ni eliminar, pero sí cambiar. Elija seal cuando la estructura sea fija, pero los valores puedan evolucionar.
const f = Object.freeze({ v: 1 });
const s = Object.seal({ v: 1 });
f.v = 100;
s.v = 100;
console.log('frozen v:', f.v);
console.log('sealed v:', s.v);preventExtensions
La restricción menos estricta es Object.preventExtensions: no puede añadir propiedades, pero sí puede cambiar y eliminar las existentes. Es la opción más permisiva de las tres.
const obj = Object.preventExtensions({ a: 1 });
obj.a = 2;
obj.b = 3;
console.log(obj.a);
console.log(obj.b);
console.log(Object.isExtensible(obj));Por qué importa
Congelar la configuración y las constantes evita modificaciones accidentales en todo el código. Pero recuerde que Object.freeze es superficial, por lo que los objetos anidados siguen siendo mutables. A continuación solucionará este problema.
const SETTINGS = Object.freeze({ maxRetries: 3 });
function tryUpdate() {
SETTINGS.maxRetries = 10;
}
tryUpdate();
console.log(SETTINGS.maxRetries);Comprobación rápida
¿Cuál es la diferencia entre Object.freeze y Object.seal?
Resumen: freeze y seal
Ha aprendido a bloquear objetos:
Object.freeze: no permite añadir, eliminar ni cambiar. Compruebe el estado conisFrozen.Object.seal: no permite añadir ni eliminar, pero sí cambiar.preventExtensions: solo impide añadir propiedades.- Las tres opciones son superficiales, lo que nos lleva al congelado profundo.
Preguntas frecuentes
¿La lección «Object.freeze y seal» es gratis?
Sí — el texto completo de «Object.freeze y seal» es gratis para leer aquí en la web. Para practicarla de forma interactiva (editor de código integrado y tutor de IA 24/7) y desbloquear el resto del curso de JavaScript Academy, actualiza a CoddyKit PRO. El curso de JavaScript Academy incluye 4 lecciones en total.
¿Qué aprenderé en «Object.freeze y seal»?
Impida cambios en los objetos. Practicas JavaScript Academy con código real que ejecutas directamente en el navegador, y un tutor de IA 24/7 responde tus preguntas mientras trabajas en la lección.
¿Necesito experiencia previa para empezar JavaScript Academy?
No se requiere experiencia previa. JavaScript Academy en CoddyKit está estructurado para principiantes hasta estudiantes avanzados, así que puedes empezar aquí o desde el inicio y avanzar a tu ritmo. Esta es la lección 1 de 4.
¿Cuánto tiempo toma la lección «Object.freeze y seal»?
La mayoría de las lecciones de CoddyKit toman alrededor de 5–10 minutos. Cada una es compacta e interactiva, así que avanzas constantemente y retomas exactamente por donde dejaste en la web y la app.
¿Puedo escribir y ejecutar código en esta lección de JavaScript Academy?
Sí. Cada lección de JavaScript Academy incluye un editor de código integrado, así que escribes y ejecutas código real directamente en tu navegador y obtienes retroalimentación instantánea de IA — sin configuración local necesaria.
Todas las lecciones de este curso
- Object.freeze y seal
- Congelación superficial frente a profunda
- Patrones de actualización inmutable
- structuredClone para copias profundas