A programozási hibák elkerülhetetlenek. Előbb vagy utóbb az alkalmazás váratlan viselkedést tapasztal. Mint minden más programozási nyelv, a JavaScript hibákat vet fel, ha valami elromlik a kódban.
A hibák megzavarják az alkalmazás normál működését. De emellett segítenek megvédeni az alkalmazást a kiszámíthatatlan viselkedéstől. Kulcsfontosságú a hibák megfelelő kezelésének ismerete.
Miért fontos a hibakezelés?
A hibakezelés hozzájárul a jobb felhasználói élményhez. A JavaScript alapértelmezett és néha bőbeszédű hibáit kicserélheti saját, ember által olvashatóbb hibaüzenetekkel. Kíméletesen kezelheti egyes hibák okait, és a program leállítása helyett futva tarthatja.
A hibakezelés is hasznos a fejlesztés során. Elkaphat egy futásidejű hibát, és valami hasznosat tehet vele, pl naplózza a böngésző konzolra. Ez kecsesebb, mint az összeomlást okozó hiba, és nem tudni, hol és miért történt a hiba.
A JavaScript beépített hibák szerkezete
A JavaScript hibái három tulajdonságú objektumok:
- név: Ez a hiba neve. Például egy hiányzó változónév SyntaxError nevű hibát dob.
- üzenet: Ez az üzenet törzse, és szövegesen magyarázza a hibát.
- ok: Ezt a tulajdonságot egyéni hibák esetén használhatja a hívási verem nyomon követésére.
A JavaScript gyakori hibatípusai
Íme néhány gyakori hiba a JavaScriptben.
Szintaktikai hiba
Szintaktikai hibák léphetnek fel, amikor a JavaScript megpróbálja értelmezni a kódot. Ez hibát jelez, ha a kód nem felel meg a megfelelő szintaxisnak. Néhány gyakori hiba, amely szintaktikai hibákat okozhat:
- Hiányzó változónevek.
- Egy függvény után hiányzik a „}”.
- Hiányzik a „)” egy feltétel után.
ReferenceError
Hivatkozási hibák akkor fordulnak elő, amikor egy program megpróbálja változóra hivatkozni amely nem elérhető vagy nem tartozik a hatókörbe.
TypeError
A JavaScript típushibát okozhat, ha nem tud végrehajtani egy műveletet, mert a várt típus eltér a kapott típustól.
URIEhiba
Ez a hiba akkor fordul elő, ha egy globális URI-kezelő függvényt – például a decodeURIComponent()-t – helytelenül használ. Ennek eredményeként a kódolás vagy dekódolás meghiúsul.
AggregateError
Ez a hiba több, egybe csomagolt hiba jelzésére szolgál. Használja, ha egyszerre sok hibát szeretne kidobni. Például a Promise.any() dobhat egy AggregateError()-t, amikor az összes neki adott ígéret elutasítja.
Belső hiba
InternalError üzenet jelenik meg, ha hiba történik a JavaScript motoron belül.
RangeError
Egyes függvények diktálják az argumentumként átadható értékek tartományát. Ez a hiba akkor fordul elő, ha olyan értéket próbál átadni, amely nem szerepel ebben a tartományban.
Hibakezelés a próbával... Catch Block
A JavaScript beépített kivételkezelési funkciót biztosít a próbáld… elkapni… végre Blokk. Azt is lehetővé teszi, hogy felvegye saját hibáit a dobás operátor.
A try…catch blokk segítségével kezelheti a futás közben előforduló hibákat. Érvényes kódot ír be a try blokkba, amely várhatóan megfelelően fut. A catch blokkba hibakezelő kódot írhat.
próbálja meg {
// Érvényes Javascript kód
} fogás (hiba) {
// Kezelési hiba
} végül {
// Hiba esetén is végrehajtódik
}
A catch blokkot figyelmen kívül hagyja, ha a try blokkban lévő kód nem okoz hibát. Ha hibát jelez, a végrehajtás a fogási blokkra ugrik. Az utolsó blokkban lévő kód lefut, függetlenül attól, hogy hiba történt-e vagy sem. Ez a blokk nem kötelező, ezért hagyja ki, ha nincs rá szüksége.
A try blokkban szereplő kódnak érvényesnek kell lennie. Ha nem, akkor a JavaScript elemzési hibát dob.
Nézzünk egy gyakorlati példát:
próbálja meg {
konzol.log (szöveg)
} fogás (hiba) {
konzol.log(hiba.üzenet)
} végül {
console.log("Ettől függetlenül kivégzik")
}
Ez a program megpróbálja naplózni a szöveges változó értékét. Mivel ez a változó nincs definiálva, a program hibát fog kiadni. Ez a hiba ki van nyomtatva a konzolra a catch blokkban. Az utolsó blokk ezután lefut, és kiír egy saját üzenetet.
ReferenceError: a szöveg nincs meghatározva
Ettől függetlenül kivégzik
Olyan helyzetekben, amikor saját hibáját kell felhoznia, használja a dobás operátor.
Tekintsük ezt a példát, amely hibát ad, ha az adatok hamisak:
const adatok = getData()
próbálja meg {
if (!data) {
dobás "Nincs adat"
}
konzol.log (adatok)
// folytatni
} fogás(hiba) {
konzol.log (hiba) // "Nincs adat"
}
Ebben a példában a program meghívja a getData() függvényt, és annak eredményét az adatváltozóhoz rendeli. A try blokkban a blokk egyéni hibát dob, ha az adatok üresek. A catch blokk elkapja a hibát, és naplózza a konzolon.
A dobáshibák nagyon előnyösek a fejlesztés során. Az egyéni hibaüzenet segítségével megértheti, miért nem működik az alkalmazás a várt módon.
Amint ez a példa bemutatja, használhat egy karakterláncot a hibaobjektumhoz. Valójában bármilyen JavaScript-kifejezést dobhat hibaként. A beépített hibákkal való összhang érdekében azonban használjon egy nevet és üzenetet tartalmazó JavaScript objektumot.
dobás {
név: "Hiba neve",
üzenet: "Hiba üzenet"
}
A JavaScript beépített konstruktorait is használhatja a hibák kidobásakor. Ezek a konstruktorok többek között az Error, a SyntaxError és a ReferenceError.
Ha hibát szeretne dobni az Error konstruktor használatával, használja ezt a kódot:
dobásújHiba("Nincs adat")
Most már hivatkozhat a névre és az üzenetre.
konzol.log (hiba.név) // Hiba
konzol.log (error.message) // Nincs adat
A JavaScript hibaobjektum kiterjesztése
Az egyéni hibaosztály jól jön, ha olyan hibákat kezel, amelyek nem felelnek meg a JavaScript által már biztosított objektumoknak. Előfordulhat például, hogy egy adatérvényesítési hibát egy ValidationError nevű konkrét típusként szeretne elkülöníteni.
Használhatja a JavaScript ES2015 osztály egyéni hibaosztály létrehozásához.
osztályValidation ErrorkiterjedHiba{
konstruktőr(üzenet) {
szuper(üzenet);
this.name = "Validation Error";
}
}
A ValidationError osztály használatával dobjon ki hibát:
dobásúj ValidationError ("Az Ön hibaüzenete")
A dobott hiba egy objektum lesz a névvel és az üzenet értékeivel.
{
név: "Validation Error",
üzenet: "Az Ön hibaüzenete"
}
A hibák segíthetnek
A hibakezelés a programozás alapvető része, függetlenül attól, hogy melyik nyelvet használja. A JavaScript nagyszerűen támogatja a hibák kiemelését és elkapását a kivételek stílusában. Számos beépített hibatípussal is rendelkezik, amelyeket kezelhet és használhat saját eseteire.
Egyes hibák, például a szintaktikai hibák észrevétlenek maradhatnak, amikor JavaScriptet ír „hanyag módban”. A szigorú mód használata lehetővé teszi, hogy a JavaScript elkapja azokat a hibákat, amelyeket egyébként figyelmen kívül hagyott volna.