Object.isFrozen() проверяет, заморожен ли объект.
Сам метод ничего не изменяет. Он только отвечает на вопрос: находится ли объект в состоянии freeze.
Синтаксис
Object.isFrozen(obj)
obj - объект, состояние которого нужно проверить.
Что делает Object.isFrozen()
Если объект заморожен, метод вернёт true.
const user = { name: "Anna" };
Object.freeze(user);
console.log(Object.isFrozen(user)); // true
Если объект не заморожен, результат будет false.
const user = { name: "Anna" };
console.log(Object.isFrozen(user)); // false
Что возвращает Object.isFrozen()
Object.isFrozen() всегда возвращает булево значение:
true, если объект замороженfalse, если нет
const user = { name: "Anna" };
console.log(Object.isFrozen(user)); // false
Object.freeze(user);
console.log(Object.isFrozen(user)); // true
Что значит “объект заморожен”
Для замороженного объекта нельзя:
- добавлять новые свойства
- удалять существующие свойства
- менять значения существующих свойств
- перенастраивать свойства
Именно это состояние и проверяет Object.isFrozen().
Object.isFrozen() и Object.freeze()
Эти методы связаны напрямую:
Object.freeze()переводит объект в замороженное состояниеObject.isFrozen()проверяет, находится ли объект в этом состоянии
const config = { version: 1 };
console.log(Object.isFrozen(config)); // false
Object.freeze(config);
console.log(Object.isFrozen(config)); // true
Object.isFrozen() ничего не замораживает
Это важный момент.
const user = { name: "Anna" };
Object.isFrozen(user);
user.name = "Ivan";
console.log(user.name); // "Ivan"
Вызов Object.isFrozen() сам по себе ничего не меняет.
Заморозка работает поверхностно
Как и Object.freeze(), проверка относится только к самому объекту, а не ко всей вложенной структуре.
const user = {
name: "Anna",
address: {
city: "Moscow",
},
};
Object.freeze(user);
console.log(Object.isFrozen(user)); // true
console.log(Object.isFrozen(user.address)); // false
Верхний объект заморожен, но вложенный address остался обычным.
Массивы и Object.isFrozen()
Массив тоже является объектом, поэтому метод работает и с ним.
const numbers = [1, 2, 3];
console.log(Object.isFrozen(numbers)); // false
Object.freeze(numbers);
console.log(Object.isFrozen(numbers)); // true
Это удобно, если нужно проверить, можно ли ещё менять массив.
Object.isFrozen() и Object.isSealed()
Эти методы похожи, но проверяют разное состояние.
const user = { name: "Anna" };
Object.seal(user);
console.log(Object.isSealed(user)); // true
console.log(Object.isFrozen(user)); // false
seal() и freeze() - не одно и то же.
Замороженный объект строже, чем просто запечатанный.
Object.isFrozen() и Object.isExtensible()
Если объект заморожен, расширять его уже нельзя.
const user = { name: "Anna" };
Object.freeze(user);
console.log(Object.isFrozen(user)); // true
console.log(Object.isExtensible(user)); // false
Но одного isExtensible() === false ещё недостаточно, чтобы объект считался замороженным.
Не только после Object.freeze()
Обычно замороженное состояние получают через Object.freeze(), но технически объект может прийти к нему и другим путём.
Например, если:
- объект уже нельзя расширять
- все его свойства неконфигурируемые
- все его свойства со значениями ещё и незаписываемые
Для обычной практики достаточно помнить: чаще всего true здесь появляется после Object.freeze().
Когда это полезно
Object.isFrozen() удобно использовать, когда:
- нужно проверить, защищён ли объект от изменений
- вы работаете с конфигами, константами или замороженными структурами
- нужно явно убедиться, что
Object.freeze()уже был применён
Пример:
const settings = Object.freeze({
theme: "dark",
});
if (Object.isFrozen(settings)) {
console.log("Настройки заморожены");
}
Object.isFrozen() не меняет объект
Метод только возвращает результат проверки.
const user = { name: "Anna" };
const result = Object.isFrozen(user);
console.log(result); // false
console.log(user); // { name: "Anna" }
Частые ошибки
Думать, что Object.isFrozen() сам замораживает объект
const user = { name: "Anna" };
Object.isFrozen(user);
user.name = "Ivan";
console.log(user.name); // "Ivan"
Метод только проверяет состояние.
Считать, что если верхний объект frozen, то вложенные тоже frozen
const user = {
profile: { city: "Moscow" },
};
Object.freeze(user);
console.log(Object.isFrozen(user)); // true
console.log(Object.isFrozen(user.profile)); // false
Заморозка по умолчанию не глубокая.
Путать Object.isFrozen() и Object.isSealed()
const user = { name: "Anna" };
Object.seal(user);
console.log(Object.isFrozen(user)); // false
Запечатанный объект ещё не обязательно заморожен.
Быстрая памятка
Object.isFrozen()проверяет, заморожен ли объект- метод возвращает
trueилиfalse - сам объект метод не изменяет
- проверка работает только для самого объекта, а не для вложенных объектов
- обычно
trueпоявляется послеObject.freeze()
Коротко
Object.isFrozen() - это способ проверить, находится ли объект в замороженном состоянии. Главное, что стоит запомнить: метод ничего не меняет сам, а только подтверждает, что объект уже защищён от изменений на верхнем уровне.