JavaScript Academy · Oppitunti

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

Oppitunti 2/38 vaihetta

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ä
Objektien turvallinen yhdistäminen, jäädyttäminen ja sinetöinti — kuvitus 1

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);
Objektien turvallinen yhdistäminen, jäädyttäminen ja sinetöinti — kuvitus 2

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);
Objektien turvallinen yhdistäminen, jäädyttäminen ja sinetöinti — kuvitus 3

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);
Objektien turvallinen yhdistäminen, jäädyttäminen ja sinetöinti — kuvitus 4

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);
Objektien turvallinen yhdistäminen, jäädyttäminen ja sinetöinti — kuvitus 5

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ä.
Objektien turvallinen yhdistäminen, jäädyttäminen ja sinetöinti — kuvitus 6

Prototyyppien saastumisen perusteiden tietovisa

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

Objektien turvallinen yhdistäminen, jäädyttäminen ja sinetöinti — kuvitus 7

Kertaus

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

Objektien turvallinen yhdistäminen, jäädyttäminen ja sinetöinti — kuvitus 8
Aloita maksutta

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

  1. Syötteiden validointi ja escapauksen perusteet
  2. Objektien turvallinen yhdistäminen, jäädyttäminen ja sinetöinti
  3. Virherajat ilman frameworkeja — käsitteellinen johdanto
← Takaisin: JavaScript Academy