Objektien turvallinen yhdistäminen, jäädyttäminen ja sinetöinti
Yhdistä objekteja ilman yllätyksiä, vältä prototyyppien saastuttamista ja suojaa dataa Object.freezella ja Object.sealilla
Objektien turvallinen yhdistäminen, jäädyttäminen ja sinetöinti on ilmainen JavaScript Academy-oppitunti CoddyKitissä. Tämä on oppitunti 2/3. Voit lukea tästä oppimispolusta kokonaan mitkä tahansa 3 oppituntia ilmaiseksi — sen jälkeen CoddyKit PRO avaa kaikki oppitunnit sekä käytännön harjoittelun sisäänrakennetulla koodieditorilla ja ympäri vuorokauden toimivalla tekoälytuutorilla. Oppitunti kuuluu JavaScript Academy-oppimispolkuun, ja edistymisesi synkronoituu verkon ja CoddyKit-sovelluksen välillä. JavaScript Academy-kurssilla on yhteensä 3 oppituntia.
Miksi turvallinen yhdistäminen?
Tavoite: Yhdistäkää turvallisesti ja suojatkaa tila.
- Yhdistäkää pinnallisesti spread-syntaksilla tai Object.assign-metodilla
- Estäkää prototyyppien saastuminen suodattamalla avaimet
- Käyttäkää turvallisina kohteina Object.create(null)-olioita
- Lukitkaa oliot freeze- ja seal-menetelmillä

Pinnallinen yhdistäminen (spread)
Käyttäkää spread-syntaksia (tai Object.assign({}, a, b)) uuden olion luomiseen. Älkää muuttako syötteinä olevia olioita.
// 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);

Prototyyppien saastumisen estäminen
Kun avaimet tulevat ulkopuolelta, laatikaa pieni sallittujen/estettyjen avainten lista ja käyttäkää kohteena Object.create(null)-oliota.
// 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);

Kloonaus ja määritys
Object.assign({}, ...) on turvallinen rakenne, jonka aloittelijat voivat lukea helposti.
// 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 vai seal
freeze estää kaikki muutokset; seal estää lisäämisen ja poistamisen mutta sallii olemassa olevien ominaisuuksien päivittämisen.
// 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);

Turvallisen yhdistämisen käytännöt
Vinkit:
- Suosikaa uusia olioita: {...a, ...b} tai Object.assign({}, a, b).
- Jos avaimet eivät ole luotettuja, käyttäkää Object.create(null)-oliota ja ohittakaa __proto__-, prototype- ja constructor-avaimet.
- Suojatkaa asetukset Object.freeze-menetelmällä ja varmistakaa mallit Object.seal-menetelmällä.

Prototyyppien saastumisen perusteiden tietovisa
Pikatarkistus: turvallisin kohde, kun yhdistetään tietoja, joiden lähde ei ole luotettu.

Kertaus
Kertaus: Yhdistäkää tiedot luomalla uusia olioita, suodattakaa ulkopuolelta tulevat avaimet ja suojatkaa tärkeät tietorakenteet freeze- ja seal-menetelmillä.

Opi JavaScript tekoälytuutorin avulla — ilmaiseksi
Kirjoita ja suorita oikeaa koodia selaimessa, saa välitöntä apua tekoälytuutorilta ympäri vuorokauden ja jatka siitä, mihin jäit, verkossa tai sovelluksessa.
- Kurssit
- 59
- Oppitunnit
- 200
Usein kysytyt kysymykset
Onko oppitunti ”Objektien turvallinen yhdistäminen, jäädyttäminen ja sinetöinti” ilmainen?
Kyllä — voit lukea täällä verkossa kokonaan ilmaiseksi mitkä tahansa JavaScript Academy-oppimispolun 3 oppituntia, myös oppitunnin “Objektien turvallinen yhdistäminen, jäädyttäminen ja sinetöinti”. Sen jälkeen CoddyKit PRO avaa kaikki oppitunnit sekä interaktiiviset harjoitukset sisäänrakennetulla koodieditorilla ja ympäri vuorokauden toimivalla tekoälytuutorilla. JavaScript Academy-kurssilla on yhteensä 3 oppituntia.
Mitä opin oppitunnilla ”Objektien turvallinen yhdistäminen, jäädyttäminen ja sinetöinti”?
Yhdistä objekteja ilman yllätyksiä, vältä prototyyppien saastuttamista ja suojaa dataa Object.freezella ja Object.sealilla Harjoittelet JavaScript Academy-aihetta koodilla, jonka suoritat suoraan selaimessa. Ympäri vuorokauden käytettävissä oleva tekoälytuutori vastaa kysymyksiisi oppitunnin aikana.
Tarvitsenko kokemusta aloittaakseni JavaScript Academy-opiskelun?
Aiempi kokemus ei ole tarpeen. CoddyKitin JavaScript Academy-oppimispolku sopii vasta-alkajista edistyneisiin, joten voit aloittaa tästä tai alusta ja edetä omaan tahtiisi. Tämä on oppitunti 2/3.
Kuinka kauan ”Objektien turvallinen yhdistäminen, jäädyttäminen ja sinetöinti”-oppitunnin suorittaminen kestää?
Useimmat CoddyKitin oppitunnit kestävät noin 5–10 minuuttia. Jokainen oppitunti on lyhyt ja interaktiivinen, joten edistyt tasaisesti ja voit jatkaa siitä, mihin jäit – sekä verkossa että sovelluksessa.
Voinko kirjoittaa ja suorittaa koodia tällä JavaScript Academy-oppitunnilla?
Kyllä. Jokainen JavaScript Academy-oppitunti sisältää sisäänrakennetun koodieditorin, joten voit kirjoittaa ja suorittaa oikeaa koodia suoraan selaimessa ja saada välitöntä palautetta tekoälyltä – paikallista asennusta ei tarvita.
Kaikki tämän kurssin oppitunnit
- Syötteiden validointi ja escapauksen perusteet
- Objektien turvallinen yhdistäminen, jäädyttäminen ja sinetöinti
- Virherajat ilman frameworkeja — käsitteellinen johdanto