Bezpieczne scalanie obiektów; zamrażanie i uszczelnianie
Scalanie obiektów bez niespodzianek, unikanie prototype pollution oraz ochrona danych za pomocą Object.freeze i Object.seal
Bezpieczne scalanie obiektów; zamrażanie i uszczelnianie to bezpłatna lekcja JavaScript Academy na CoddyKit. To lekcja 2 z 3. Możesz przeczytać całą lekcję poniżej za darmo — a potem ćwiczyć ją interaktywnie w przeglądarce z wbudowanym edytorem kodu i tutorem AI dostępnym 24/7. To część ścieżki edukacyjnej JavaScript Academy, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs JavaScript Academy zawiera 3 lekcji w sumie.
Dlaczego bezpieczne scalanie?
Cel: bezpiecznie scalać dane i chronić stan.
- Płytkie scalanie za pomocą spread lub Object.assign
- Unikanie prototype pollution przez filtrowanie kluczy
- Używanie Object.create(null) jako bezpiecznego obiektu docelowego
- Używanie freeze i seal do blokowania obiektów

Płytkie scalanie (spread)
Należy używać spread (lub Object.assign({}, a, b)), aby utworzyć nowy obiekt; nie należy modyfikować danych wejściowych.
// Shallow merge with spread keeps sources unchanged
const a = { x: 1, y: 2 };
const b = { y: 9, z: 3 };
// Later keys win on conflicts
const merged1 = { ...a, ...b };
console.log("a:", a);
console.log("b:", b);
console.log("merged1:", merged1);

Unikanie prototype pollution
Gdy klucze pochodzą z zewnątrz, należy utworzyć krótką allowlistę/denylistę i użyć Object.create(null) jako obiektu docelowego.
// Avoid prototype pollution: use a null-prototype target and skip special keys
function safeMergeUntrusted(pairs) {
// target has no prototype
const out = Object.create(null);
// keys to skip
const BLOCK = new Set(["__proto__", "prototype", "constructor"]);
for (const [k, v] of pairs) {
if (typeof k !== "string") continue;
if (BLOCK.has(k)) continue;
out[k] = v;
}
return out;
}
const inputPairs = [
["name", "Ayla"],
["__proto__", { hacked: true }],
["role", "user"]
];
const safe = safeMergeUntrusted(inputPairs);
console.log("safe.name:", safe.name);
console.log("safe.role:", safe.role);
console.log("safe.__proto__ is undefined?", safe.__proto__ === undefined);

Klonowanie i przypisywanie
Object.assign({}, ...) to bezpieczny schemat, który początkujący mogą łatwo zrozumieć.
// Object.assign can also create a new object
const base = { a: 1, b: 2 };
const patch = { b: 5 };
// New object as first arg → sources untouched
const merged2 = Object.assign({}, base, patch);
console.log("base:", base);
console.log("patch:", patch);
console.log("merged2:", merged2);

Freeze a seal
freeze blokuje wszystkie zmiany, a seal blokuje dodawanie i usuwanie właściwości, ale pozwala aktualizować istniejące właściwości.
// Freeze: no add/remove/change
const frozen = Object.freeze({ id: 1, tag: "locked" });
// Seal: no add/remove, but you may change existing values
const sealed = Object.seal({ id: 2, tag: "open" });
// Attempts (silently fail in non-strict mode)
frozen.tag = "new";
sealed.tag = "updated";
sealed.newKey = 123;
console.log("frozen:", frozen);
console.log("sealed:", sealed);

Bezpieczne nawyki przy scalaniu
Wskazówki:
- Należy preferować nowe obiekty: {...a, ...b} lub Object.assign({}, a, b).
- W przypadku niezaufanych kluczy należy używać Object.create(null) oraz pomijać __proto__, prototype i constructor.

Quiz z podstaw prototype pollution
Szybkie sprawdzenie: najbezpieczniejszy obiekt docelowy dla niezaufanego scalania.

Podsumowanie
Podsumowanie: należy scalać dane przez tworzenie nowych obiektów, filtrować niezaufane klucze oraz używać freeze/seal do ochrony ważnych struktur danych.

Często zadawane pytania
Czy lekcja „Bezpieczne scalanie obiektów; zamrażanie i uszczelnianie” jest bezpłatna?
Tak — pełny tekst „Bezpieczne scalanie obiektów; zamrażanie i uszczelnianie” jest dostępny za darmo tutaj w sieci. Aby ćwiczyć ją interaktywnie (wbudowany edytor kodu i tutor AI dostępny 24/7) i odblokować resztę kursu JavaScript Academy, przejdź na CoddyKit PRO. Kurs JavaScript Academy zawiera 3 lekcji w sumie.
Co nauczysz się w „Bezpieczne scalanie obiektów; zamrażanie i uszczelnianie”?
Scalanie obiektów bez niespodzianek, unikanie prototype pollution oraz ochrona danych za pomocą Object.freeze i Object.seal Ćwiczysz JavaScript Academy z praktycznym kodem, który uruchamiasz bezpośrednio w przeglądarce, a tutor AI dostępny 24/7 odpowiada na Twoje pytania podczas pracy nad lekcją.
Czy potrzebuję doświadczenia, aby zacząć JavaScript Academy?
Nie wymagamy żadnego doświadczenia. JavaScript Academy w CoddyKit jest strukturyzowany dla początkujących i zaawansowanych użytkowników, więc możesz zacząć tutaj lub od początku i uczyć się w swoim tempie. To lekcja 2 z 3.
Ile czasu zajmuje lekcja „Bezpieczne scalanie obiektów; zamrażanie i uszczelnianie”?
Większość lekcji CoddyKit trwa około 5–10 minut. Każda lekcja to mały, interaktywny krok, dzięki czemu robisz systematyczne postępy i zawsze wracasz dokładnie do tego samego miejsca — na webie i w aplikacji.
Czy mogę pisać i uruchamiać kod w tej lekcji JavaScript Academy?
Tak. Każda lekcja JavaScript Academy zawiera wbudowany edytor kodu, więc piszesz i uruchamiasz prawdziwy kod bezpośrednio w przeglądarce i od razu otrzymujesz sprzężenie zwrotne od AI — bez konfiguracji na komputerze.
Wszystkie lekcje w tym kursie
- Walidacja danych wejściowych i podstawy escapowania
- Bezpieczne scalanie obiektów; zamrażanie i uszczelnianie
- Granice błędów (koncepcyjnie) bez frameworków