Programavimo klaidos yra neišvengiamos. Anksčiau ar vėliau jūsų programa patirs netikėtą elgesį. Kaip ir bet kuri kita programavimo kalba, „JavaScript“ sukelia klaidų, kai jūsų kode kažkas negerai.
Klaidos sutrikdo įprastą programos eigą. Tačiau jie taip pat padeda apsaugoti jūsų programą nuo nenuspėjamo elgesio. Labai svarbu žinoti, kaip tinkamai elgtis su klaidomis.
Kodėl svarbu valdyti klaidas?
Klaidų tvarkymas prisideda prie geresnės vartotojo patirties. Numatytąsias „JavaScript“ klaidas, o kartais ir išsamias klaidas, galite pakeisti labiau žmonėms suprantamais klaidų pranešimais. Galite dailiai susidoroti su kai kurių klaidų priežastimis ir toliau veikti, o ne uždaryti programą.
Klaidų tvarkymas taip pat naudingas kuriant. Galite užfiksuoti vykdymo laiko klaidą ir su ja padaryti ką nors naudingo, pvz prisijungę prie naršyklės konsolės. Tai grakštesnė nei klaida, sukelianti gedimą ir nežinojimas, kur ir kodėl įvyko klaida.
„JavaScript“ integruotų klaidų struktūra
„JavaScript“ klaidos yra objektai, turintys tris savybes:
- vardas: Tai klaidos pavadinimas. Pavyzdžiui, trūkstamas kintamojo pavadinimas sukels klaidą, vadinamą SyntaxError.
- žinutę: Tai yra pranešimo tekstas ir paaiškina klaidą.
- priežastis: galite naudoti šią ypatybę su pasirinktomis klaidomis, kad galėtumėte stebėti skambučių krūvą.
Dažni „JavaScript“ klaidų tipai
Štai keletas dažniausiai pasitaikančių „JavaScript“ klaidų.
Sintaksės klaida
Sintaksės klaidų gali atsirasti, kai „JavaScript“ bando interpretuoti jūsų kodą. Jei kodas neatitiks tinkamos sintaksės, bus rodoma klaida. Kai kurios dažniausios klaidos, dėl kurių gali atsirasti sintaksės klaidų, yra šios:
- Trūksta kintamųjų pavadinimų.
- Po funkcijos trūksta „}“.
- Trūksta „)“ po sąlygos.
Nuorodos klaida
Nuorodos klaidos atsiranda, kai programa bando nuoroda į kintamąjį kuri nepasiekiama arba nepatenka į taikymo sritį.
Tipo klaida
„JavaScript“ gali pateikti tipo klaidą, kai negali atlikti operacijos, nes tipas, kurio tikimasi, skiriasi nuo gauto.
URIE klaida
Ši klaida įvyksta, jei netinkamai naudojate visuotinę URI tvarkymo funkciją, pvz., decodeURIComponent(). Dėl to kodavimas arba dekodavimas nepavyksta.
AggregateError
Ši klaida naudojama kelioms klaidoms, supakuotoms į vieną, pavaizduoti. Naudokite jį, kai norite iš karto padaryti daug klaidų. Pavyzdžiui, Promise.any() gali išmesti AggregateError(), kai visi jam perduoti pažadai atmetami.
Vidinė klaida
Kai „JavaScript“ variklio viduje įvyksta klaida, pateikiama vidinė klaida.
RangeError
Kai kurios funkcijos diktuoja reikšmių diapazoną, kurį galite perduoti kaip argumentus. Ši klaida atsiranda, kai bandote perduoti reikšmę, kuri neįtraukta į tą diapazoną.
Tvarkant klaidas bandant... Pagauti bloką
„JavaScript“ suteikia integruotą išimčių tvarkymo funkciją su pabandyk...pagauk...pagaliau blokas. Tai taip pat leidžia jums iškelti savo klaidas naudojant mesti operatorius.
Galite naudoti try…catch bloką, kad tvarkytumėte klaidas, atsirandančias vykdymo metu. Bandymo bloke rašote tinkamą kodą, kurį tikitės tinkamai vykdyti. Sugavimo bloke galite įrašyti klaidų apdorojimo kodą.
bandyti {
// Galiojantis Javascript kodas
} sugauti (klaida) {
// Tvarkos klaida
} pagaliau {
// Vykdoma net tada, kai įvyksta klaida
}
Į gaudymo bloką nepaisoma, jei trynimo bloke esantis kodas nekelia jokių klaidų. Jei tai sukelia klaidą, vykdymas perkeliamas į gaudymo bloką. Kodas paskutiniame bloke paleidžiamas neatsižvelgiant į tai, ar įvyko klaida, ar ne. Šis blokas nėra privalomas, todėl praleiskite jį, jei jums jo nereikia.
Į bandomąjį bloką įtrauktas kodas turi būti galiojantis. Jei ne, „JavaScript“ išmes analizavimo klaidą.
Pažvelkime į praktinį pavyzdį:
bandyti {
konsolė.log (tekstas)
} sugauti (klaida) {
konsolė.log(klaida.pranešimas)
} pagaliau {
console.log("Bus įvykdyta nepaisant to")
}
Ši programa bando įrašyti teksto kintamojo reikšmę. Kadangi šis kintamasis nėra apibrėžtas, programa išmes klaidą. Ši klaida atspausdinta konsolėje gaudymo bloke. Tada paleidžiamas galutinis blokas ir išspausdinamas atskiras pranešimas.
Nuorodos klaida: tekstas neapibrėžtas
Bus įvykdyta nepaisant to
Tais atvejais, kai reikia iškelti savo klaidą, naudokite mesti operatorius.
Apsvarstykite šį pavyzdį, kuris pateikia klaidą, jei duomenys yra klaidingi:
konst duomenys = getData()
bandyti {
if (!duomenys) {
mesti "Nėra duomenų"
}
konsolė.log (duomenys)
// Tęsti
} sugauti(klaida) {
konsolė.log (klaida) // "Nėra duomenų"
}
Šiame pavyzdyje programa iškviečia funkciją getData() ir priskiria jos rezultatą duomenų kintamajam. Bandymo bloke blokas pateikia pasirinktinę klaidą, jei duomenys yra tušti. Sugavimo blokas užfiksuoja tą klaidą ir registruoja ją konsolėje.
Mesti klaidas yra labai naudinga kuriant. Galite naudoti pasirinktinį klaidos pranešimą, kad suprastumėte, kodėl jūsų programa neveikia taip, kaip tikėtasi.
Kaip parodyta šiame pavyzdyje, klaidos objektui galite naudoti eilutę. Iš tikrųjų galite mesti bet kurią „JavaScript“ išraišką kaip klaidą. Tačiau, kad būtų suderintos su įmontuotomis klaidomis, naudokite „JavaScript“ objektą su pavadinimu ir pranešimu.
mesti {
vardas: "Klaidos pavadinimas",
žinutė: "Klaidos pranešimas"
}
Taip pat galite naudoti „JavaScript“ įtaisytuosius konstruktorius, kai mesti klaidas. Šie konstruktoriai, be kita ko, apima Error, SyntaxError ir ReferenceError.
Norėdami pateikti klaidą naudodami klaidų konstruktorių, naudokite šį kodą:
mestinaujasKlaida("Nėra duomenų")
Dabar galite nurodyti vardą ir pranešimą.
konsolė.log (error.name) // Klaida
konsolė.log (error.message) // Nėra duomenų
„JavaScript“ klaidos objekto išplėtimas
Pasirinktinė klaidų klasė praverčia apdorojant klaidas, kurios neatitinka „JavaScript“ jau pateiktų objektų. Pavyzdžiui, galbūt norėsite išskirti duomenų patvirtinimo klaidą kaip konkretų tipą, vadinamą ValidationError.
Galite naudoti a JavaScript ES2015 klasė sukurti pasirinktinę klaidų klasę.
klasėPatvirtinimo klaidatęsiasiKlaida{
konstruktorius(pranešimas) {
super(pranešimas);
tai.vardas = "Patvirtinimo klaida";
}
}
Išmeskite klaidą naudodami ValidationError klasę, pavyzdžiui:
mestinaujas ValidationError ("Jūsų klaidos pranešimas")
Išmesta klaida bus objektas su pavadinimu ir pranešimo reikšmėmis.
{
vardas: "Patvirtinimo klaida",
žinutė: "Jūsų klaidos pranešimas"
}
Klaidos gali padėti
Klaidų tvarkymas yra pagrindinė programavimo dalis, nesvarbu, kurią kalbą naudojate. „JavaScript“ puikiai palaiko išimčių stiliaus klaidas ir jas gaudo. Jame taip pat yra keletas integruotų klaidų tipų, kuriuos galite tvarkyti ir naudoti savo atvejams.
Kai kurios klaidos, pvz., sintaksės klaidos, gali būti neaptiktos, kai rašote „JavaScript“ „netvarkingu režimu“. Naudojant griežtą režimą „JavaScript“ leidžia užfiksuoti klaidas, kurių kitu atveju būtų nepaisoma.