Az ECMA 2022 júniusi közgyűlése elfogadta az ES2022-es specifikációt. Nézzük milyen újdonságokat hoz ez a JavaScript-be
Await a legfelső szinten
Await-et deklarálni eddig csak aszinkron függvényekben lehetett, azonkívül nem.
Az ES2022-vel többé már nem kell aszinkron függvénybe tenni, ha a moduok legfelső szintjén vagyunk.
Ez lehetővé teszi az importált modulok végrehajtásának késleltetését, szüneteltetheti a szülőmodulok betöltését az importált modul betöltődédéig.
A JavaScript modulok képesek lesznek megvárni azokat az erőforrásokat, amelyek importálásához más modulokra van szükség.
Privát mezők és metódus deklarációk
Nem kell többé konstruktort meghívni egy osztálymező deklarálásához, enélkül is lehet enélkül is deklarálható az osztálymező a # előtag használatával.
A szimbólum használatával a metódusokat és az accessorokat privátra is állíthatjuk, egyidejűleg használhatunk vele getter és setter metódusokat. A metódusokat és az accessor-okat szigorúan belül tartja és megakadályozza elérésüket kívülről.
Statikus osztály mezők és privát statikus metódusok
A statikus osztálymezőhöz a JavaScript korábbi verzióiban lévő osztályok példányaiban nem lehetett hozzáférni, csak a prototípuson keresztül.
Az ES2022 újdonságai lehetővé teszik számunkra, hogy statikus osztálymezőket és privát statikus jellemzőket deklaráljunk a static kulcsszó használatával.
A privát mezők ergonómikus "márkaellenőrzése"
A privát mezőknek beépített „márkaellenőrzése” van, vagyis ha olyan objektumon próbálsz hozzáférni egy privát mezőhöz, amelyre nincs telepítve, az kivételt dob.
Ez nagyszerű, mondhatnánk! Azonban annak érdekében, hogy egy privát mező megléte valóban privát maradjon, gyakran érdemes ellenőrizni, hogy egy objektum rendelkezik-e privát mezővel, és ha nincs, akkor van-e valamilyen tartalék viselkedése (ami akár egyéni kivételt is jelenthet egy üzenettel ebből nem derül ki, hogy privát mezőt használok mechanizmusként).Ha olyan nyilvános mezőt próbál meg elérni, amely nem volt deklarálva az előző verziókban, akkor meghatározatlan hibaüzenetet kap. Ha megpróbál hozzáférni egy privát mezőhöz, hibaüzenetet kap.Az ES2022 bevezeti a kezelőt a probléma megoldására. Az in operátor használatával ellenőrizheti, hogy egy mező jelen van-e egy osztályban vagy sem, még a privát osztályokban is.
AT metódus indexeléshez
Tömbökhöz használhatjuk. A [] váltható le vele. Mínusz érték is megadható neki, ekkor látható hogy a tömb végéről indul el.
Object.hasOwn()
Egy statikus metódus, ami igazat (true) ad vissza ha az objektum saját tulajdonsága a neki megadott tulajdonság. Minden más esetben false.
RegExp egyezési indexek
Ez az új szolgáltatás lehetővé teszi a /d karakter használatát annak kifejezésére, hogy a megadott egyező karakterlánc kezdő és záró indexét szeretné megadni. Korábban ez nem volt lehetséges.
Regexp.exec - ez egymás után adja vissza az eredményeket
String.matchAll - Ez egy iterátort ad vissza
Error.cause
Az Error objektum és alosztályai most lehetővé teszik, hogy meghatározzuk, melyik hiba okozta az aktuális kivételt:Most a hiba oka megjelenik a verem nyomkövetésében, és az err.cause címen keresztül érhető el.
Osztálystatikus inicializációs blokkok
Az osztály statikus inicializálási blokkok az osztályok speciális jellemzői, amelyek lehetővé teszik a statikus tulajdonságok rugalmasabb inicializálását, amely mezőnkénti inicializálással érhető el. A statikus blokkok lehetővé teszik az utasítások kiértékelését az inicializálás során, ami lehetővé teszi a (például) try...catch vagy több mező beállítását tartalmazó inicializálást egyetlen értékből.
Az ES2022 lehetővé teszi a fejlesztők számára, hogy statikus blokkokat használjanak az osztálydeklaráció hatókörén belüli utasítások kiértékeléséhez. Ez olyan esetekben hasznos, amikor több statikus mezőt kell beállítani. A statikus blokkok hozzáférést tesznek lehetővé egy osztály privát állapotaihoz (metódusaihoz és mezőihez), és lehetővé teszik az információk megosztását az azonos hatókörben deklarált osztályok vagy funkciók között.Ez azt jelenti, hogy statikus blokkok is használhatók információ megosztására az osztályok között a példány privát mezőivel és más osztályokkal vagy függvényekkel, amelyek ugyanabban a hatókörben vannak deklarálva (hasonlóan a C++ „barát” osztályaihoz).
Temporal funkció
Ez egy 3. fázisú ES2022 JavaScript szolgáltatás, amely a Date objektumot helyettesíti. A dátum régóta fájdalmas pont az ECMAScriptben.
Az időbeli függvények (Temporal functions) várhatóan felváltják az olyan könyvtárakat, mint a moment.js.
A Temporal egy globális objektum, amely az új dátum és idő API legfelső szintű névtereként fog szolgálni, és felöleli a dátumok, időpontok, naptárak és időzónák teljes spektrumát. Hasonlóan fog működni, mint a Unix időbélyegző funkciója.