Object
Vigyázat!
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,
hello(){
alert(`Hello, ${this.name}`);
}
}
Elemek felvétele
Az elemek felvételénél a legegyszerűbb módszer, hogy a tömbhöz hasonlóan kezelve adjuk meg a hozzádni kívánt elemet.
Figyelem!
A kulcsot mindig stringként adjuk meg!
person["dogs"] = ["Bodri", "Frakk"];
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, azonban lekérdezhetjük, úgyis mintha egy osztály egy tulajdonsága lenne.
alert(person["name"]);
alert(2022-person.birthYear);
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;
Objektum védelme
Az objektumunkat többféleképpen is meg tudjuk védeni küldő beavatkozásoktól.
Vigyázat!
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);
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]);
}
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