Fusione sicura degli oggetti; congelamento e sigillatura
Fondi gli oggetti senza sorprese, eviti il prototype pollution e proteggi i dati con Object.freeze e Object.seal.
Fusione sicura degli oggetti; congelamento e sigillatura è una lezione JavaScript Academy gratuita su CoddyKit. Questa è la lezione 2 di 3. Puoi leggere la lezione completa qui gratuitamente — poi esercitati direttamente nel browser con un editor di codice integrato e un tutor IA disponibile 24/7. Fa parte del percorso di apprendimento JavaScript Academy, e i tuoi progressi si sincronizzano tra il web e l'app CoddyKit. Il corso JavaScript Academy include 3 lezioni in totale.
Perché fare merge sicuri?
Obiettivo: eseguire merge in sicurezza e proteggere lo stato.
- Merge superficiale con spread o Object.assign
- Evitare la prototype pollution filtrando le chiavi
- Utilizzare Object.create(null) per destinazioni sicure
- Utilizzare freeze e seal per bloccare gli oggetti

Merge superficiale (spread)
Utilizzi spread (o Object.assign({}, a, b)) per creare un nuovo oggetto; non modifichi gli input.
// 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);

Evitare la prototype pollution
Quando le chiavi provengono dall'esterno, scriva una piccola allowlist/denylist e utilizzi Object.create(null) come destinazione.
// 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);

Clona e assegna
Object.assign({}, ...) è un pattern sicuro e facilmente leggibile per i principianti.
// 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 o seal
freeze impedisce qualsiasi modifica; seal impedisce di aggiungere o rimuovere proprietà, ma consente di aggiornare quelle esistenti.
// 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);

Buone pratiche per i merge sicuri
Suggerimenti:
- Preferisca nuovi oggetti: {...a, ...b} o Object.assign({}, a, b).
- Per le chiavi non attendibili, utilizzi Object.create(null) e ignori __proto__, prototype, constructor.
- Protegga le configurazioni con Object.freeze; protegga i modelli con Object.seal.

Quiz sulle basi della prototype pollution
Verifica rapida: destinazione più sicura per i merge con dati non attendibili.

Riepilogo
Riepilogo: esegua il merge creando nuovi oggetti, filtri le chiavi non attendibili e utilizzi freeze/seal per proteggere le strutture dati importanti.

Domande Frequenti
La lezione «Fusione sicura degli oggetti; congelamento e sigillatura» è gratuita?
Sì — il testo completo di «Fusione sicura degli oggetti; congelamento e sigillatura» è gratuito qui sul web. Per esercitarvi in modo interattivo (un editor di codice integrato e un tutor IA 24/7) e sbloccare il resto del corso JavaScript Academy, passa a CoddyKit PRO. Il corso JavaScript Academy include 3 lezioni in totale.
Cosa imparerò in «Fusione sicura degli oggetti; congelamento e sigillatura»?
Fondi gli oggetti senza sorprese, eviti il prototype pollution e proteggi i dati con Object.freeze e Object.seal. Eserciti JavaScript Academy con codice pratico che esegui direttamente nel browser, e un tutor IA 24/7 risponde alle tue domande mentre lavori sulla lezione.
Ho bisogno di esperienza per iniziare JavaScript Academy?
Non è richiesta alcuna esperienza precedente. JavaScript Academy su CoddyKit è strutturato per principianti e studenti avanzati, quindi puoi iniziare da qui o dall'inizio e procedere al tuo ritmo. Questa è la lezione 2 di 3.
Quanto tempo richiede la lezione «Fusione sicura degli oggetti; congelamento e sigillatura»?
La maggior parte delle lezioni CoddyKit richiede circa 5–10 minuti. Ogni lezione è breve e interattiva, quindi fai progressi costanti e riprendi esattamente da dove hai lasciato su web e app.
Posso scrivere ed eseguire codice in questa lezione JavaScript Academy?
Sì. Ogni lezione JavaScript Academy include un editor di codice integrato, quindi scrivi ed esegui codice reale direttamente nel tuo browser e ricevi feedback istantaneo dall'IA — nessuna configurazione locale necessaria.
Tutte le lezioni di questo corso
- Validazione degli input e basi dell’escaping
- Fusione sicura degli oggetti; congelamento e sigillatura
- Error boundary (concettuali) senza framework