Коротка відповідь
juniorМутабельність — це здатність об’єкта змінюватися після створення. Іммутабельність — навпаки, об’єкт залишається незмінним. У JS мутабельні типи: object, array, function; іммутабельні — number, string, boolean, null, undefined, symbol.
Повне пояснення
Що це і навіщо Мутабельність (mutable) означає, що після створення об’єкта його внутрішнє стан можна змінювати. Іммутабельність (immutable) гарантує, що об’єкт не піддається змінам; будь‑яка «зміна» створює новий об’єкт.
Ключові принципи/терміни
- Reference type (object, array, function) – мутабельні.
- Primitive type (number, string, boolean, null, undefined, symbol) – іммутабельні.
- Reassignment змінює посилання, а не саму структуру.
Як це працює
При мутабельному типі зміни вносяться без створення копії: obj.a = 2;. Для іммутабельного типу будь‑яка операція повертає новий об’єкт: const newStr = str + '!';.
Практика і реалізація (JS/TS)
const obj = { a: 1 };
obj.a = 2; // мутабельність
const str = 'hi';
const newStr = str + '!'; // іммутабельність, оригінал залишається
Тестування У Jest можна перевірити, що об’єкт не змінюється:
expect(() => { obj.a = 3; }).not.toThrow();
expect(str).toBe('hi');
Оптимізація та edge‑cases
- Для великих масивів використовуйте
Object.freeze()або бібліотеки типу Immutable.js. - У React state слід тримати іммутабельним, щоб забезпечити правильний рендер.
Часті помилки
- Необережне мутування state в Redux.
- Використання
Object.assign()без копії.
Cheatsheet
- Mutable: object, array, function.
- Immutable: number, string, boolean, null, undefined, symbol.