Логотип YeaHub

База вопросов

Собеседования

Тренажёр

База ресурсов

Обучение

Навыки

Задачи

Войти

Выбери, каким будет IT завтра — вместе c нами!

YeaHub — это полностью открытый проект, призванный объединить и улучшить IT-сферу. Наш исходный код доступен для просмотра на GitHub. Дизайн проекта также открыт для ознакомления в Figma.

© 2026 YeaHub

AI info

Карта сайта

Документы

Медиа

Назад
Вопрос про JavaScript: freeze, объект, seal

Назовите несколько способов создания неизменного объекта в JavaScript.

Этот вопрос проверяет понимание способов защиты объектов от изменений.

Короткий ответ

Существуют несколько способов сделать объект неизменным. Один из самых популярных — это метод Object.freeze(), который запрещает добавление, удаление и изменение свойств объекта. Также можно использовать Object.seal(), который позволяет изменять существующие свойства, но не добавлять новые. Для глубоких объектов применяют рекурсивное замораживание.

Длинный ответ

В JavaScript неизменяемые объекты важны, когда требуется защитить данные от случайных или преднамеренных изменений. Вот несколько способов создать такие объекты:

 

Object.freeze():
Это наиболее известный метод для создания неизменного объекта. Он предотвращает любые изменения объекта — нельзя добавлять, удалять или изменять свойства. Однако, это работает только на уровне первого уровня объекта. Вложенные объекты останутся изменяемыми:

const obj = { name: 'Alice' }; 
Object.freeze(obj); 
obj.name = 'Bob'; // Ошибка в строгом режиме, игнорируется в нестрогом 
console.log(obj.name); // "Alice"

Object.seal():
Этот метод запрещает добавление и удаление свойств, но позволяет изменять существующие. Это полезно, если вам нужно предотвратить изменение структуры объекта, но оставить возможность редактировать значения:

const obj = { age: 25 }; 
Object.seal(obj); 
obj.age = 26; // Изменение разрешено 
delete obj.age; // Не сработает 
console.log(obj.age); // 26

Глубокое замораживание:
Чтобы сделать объект и все его вложенные объекты неизменными, нужно применить Object.freeze() рекурсивно:

function deepFreeze(obj) {
  Object.freeze(obj);  
  Object.keys(obj).forEach(key => {
      if (typeof obj[key] === 'object' && obj[key] !== null) {  
          deepFreeze(obj[key]);    
      }  
  }); 
} 

const nestedObj = { info: { age: 25 } }; 
deepFreeze(nestedObj); 
nestedObj.info.age = 30; // Изменение не произойдёт 
console.log(nestedObj.info.age); // 25

Эти методы широко используются в приложениях, где важно гарантировать неизменность данных, например, в функциональном программировании или в архитектурах, таких как Redux, для управления состоянием приложения.

Frontend developer

tech
tech
tech
tech
tech
tech
tech
tech
tech

Ментор по Frontend

Полное сопровождение до оффера — без дорогих курсов, с оплатой после трудоустройства

Записаться на консультацию

Уровень

  • Рейтинг:

    3

  • Сложность:

    8

Навыки

  • JavaScript

    JavaScript

Ключевые слова

#freeze

#объект

#seal

Подпишись на React Developer в телеграм

Frontend developer

tech
tech
tech
tech
tech
tech
tech
tech
tech

Ментор по Frontend

Полное сопровождение до оффера — без дорогих курсов, с оплатой после трудоустройства

Записаться на консультацию