Object 23.11.20

ES-ben minden adatszerkezetet referencia szerint kezelünk. Vagyis a változónk tartalma az nem a tényleges adat, hanem egy mutató, ami megmondja, hogy hol van a megfelelő adatunk! Ezért vagyunk képesek konstansként felvenni és mégis módosítani.

Az object, a Maphez hasonlóan kulcs-érték páros alapján fog nekünk értékeket tárolni, azonban jóval rugalmasabban kezelhező, mint társa.

const object1 = Object();
const object2 = {};
const person = {
    name: "Papp Zsombor",
    birthYear: 2003,
}

Elemek elérése

Az elemeket két módon is elérhetjük. Lekérdezhetjük a kulcs alapján, mintha tömb lenne...

A kulcsot mindig stringként adjuk meg!
alert(person["name"]);

Azonban lekérdezhetjük, úgyis mintha egy osztály egy tulajdonsága lenne.

alert(2023 - person.birthYear);

Elemek felvétele

Az elemek felvételénél az egyik módszer, hogy a tömbhöz hasonlóan kezelve adjuk meg a hozzádni kívánt elemet.

A kulcsot mindig stringként adjuk meg!
person["dogs"] = ["Bodri", "Frakk"];

Azonban nem ez az egyedüli lehetőségünk, ugyanis az elem eléshez hasonlóan .-al elválaszva is meg tudjuk azdni az új elemünket.

person.hobbies = ["Basketball", "Reading"];

Elemek törlése az objektumból

Amennyiben megszabadulnánk egy kulcs-érték párostól, akkor már egy kicsit érdekesebb a helyzet, ugyanis egy speciális függvényt kell meghívni hozzá, amely a mögötte álló kiválasztást törli.

delete person.dogs;

Az objektum végig iterálása

Az Object osztály statikus függvényei segítségével az előzőekhez haszonlóan végig tudunk menni az adott object kulcsain, értékein, vagy bejegyzésein.

for (const key of Object.keys(person)){
    console.log(key);
}

for(const value of Object.values(person)){
    console.log(value);
}

for(const entries of Object.entries(person)){
    console.table(entries);
}

Viszont az object esetén nem csak for..of-al, hanem for..in-el is végig tudunk menni, így a kulcsokon megyünk végig.

for(const key in person){
    console.log(person[key]);
}

Keresés az objektumban

Függvények

Rövid szintaxis

Számított tulajdonságok

Objektum védelme

Az objektumunkat többféleképpen is meg tudjuk védeni küldő beavatkozásoktól.

Bármelyiket is alkalmazzuk, azzal végelesen lezárjuk az objektumunkat, így később nem lehet feloldani!

Seal

Amennyiben ezt alkalmazzük, az objektunkhoz nem lehet úgy tulajdonságot adni majd, valamit törölöni bármely tulajdonságát. De a meglévőket tudjuk még szerkeszteni.

const person = {
    name: "Papp Zsombor"
}
Object.seal(person);

Freeze

Amennyiben lefagyasztunk egy objektumot, úgy többet semmilyen módon nem tudjuk szerkeszteni azt.

const person = {
    name: "Papp Zsombor"
}
Object.freeze(person);

Destrukció

Annak érdekében, hogy bizonyos adatokat az objektumból ki tudjuk emelni változóként, lehetőségünk van szétbontani azt.

const {name,birthYear} = person;

Ekkor a name és a birthYear onállő változóként jönnek létre és az objectben adott helyen lévő értékekkel töltődnek fel. Abban az esetben, ha a maradékot is szeretnénk elmenteni egy külön objectbe, akkor azt a ... (rest) operátorral tehetjük meg, akkor a fenti művelet így módosul:

const {name, birthYear, ...rest} = person;

Mikor lehet ez hasznos nekünk?

A leghasznosabb, amikor egy függvénynek sok paramétert kell átadni, úgy, hogy egy objectből kell őket kiválogatni, akkor a következő módon meg tudjuk oldani energiatakarékosan:

function clog({name, birthYear}){
    console.log(name);
    console.log(birthYear);
}

clog(person);
\pagebreak