Junior
Na czym polega kluczowa różnica między typami danych mutowalnymi a niemutowalnymi?
sobes.tech AI
Odpowiedź od AI
Kluczowa różnica polega na możliwości zmiany wartości obiektu po jego utworzeniu. Typy mutowalne pozwalają na bezpośrednie zmiany, natomiast niemutowalne nie. Przy "zmianie" niemutowalnego obiektu, w rzeczywistości tworzony jest nowy obiekt z nową wartością.
Przykłady:
Typy mutowalne:
ArrayObject
// Przykład mutowalny (Array)
let mutableArray = [1, 2];
mutableArray.push(3); // Modyfikuje istniejącą tablicę
console.log(mutableArray); // Wyświetli: [1, 2, 3]
// Przykład mutowalny (Object)
let mutableObject = { a: 1 };
mutableObject.b = 2; // Modyfikuje istniejący obiekt
console.log(mutableObject); // Wyświetli: { a: 1, b: 2 }
Typy niemutowalne:
StringNumberBooleannullundefinedSymbolBigInt
// Przykład niemutowalny (String)
let immutableString = "cześć";
immutableString = immutableString + " świat"; // Tworzy nowy łańcuch
console.log(immutableString); // Wyświetli: cześć świat
// Porównanie referencji pokaże różnicę
let str1 = "abc";
let str2 = str1.toUpperCase();
console.log(str1 === str2); // Wyświetli: false
// Przykład niemutowalny (Number)
let immutableNumber = 10;
immutableNumber = immutableNumber + 5; // Tworzy nową wartość liczbową
console.log(immutableNumber); // Wyświetli: 15
Porównanie:
| Cecha | Mutowalne | Niemutowalne |
|---|---|---|
| Zmiana | Możliwa po utworzeniu | Niemożliwa po utworzeniu |
| Nowy odnośnik | Pozostaje ten sam | Tworzony jest nowy przy "zmianie" |
Zrozumienie tej różnicy jest kluczowe dla przewidywalności kodu, pracy ze stanami (np. w React z Redux) i optymalizacji. Użycie niemutowalnych danych upraszcza debugowanie, umożliwia łatwiejsze funkcje cofania (undo) i optymalizuje renderowanie w frameworkach UI przez prostą porównanie odnośników.