
MÔnikord on JavaScripti koodi kirjutamine keeruline ja vahel isegi hirmutav, mis on tuttav paljudele arendajatele. Töö kÀigus tekivad kindlasti vead, millest osa kordub sageli. Artiklis, mis on mÔeldud algajatele arendajatele, rÀÀgitakse nendest vigadest ja nende lahendamise viisidest. NÀiteks toimi funktsioonide, omaduste ja objektide nimedest . KÔik see aitab kiiresti meelde jÀtta, kuidas tavalisi vigu parandada.
Tuletame meelde: kĂ”igile «Habr» lugejatele â 10 000 rubla allahindlus igale Skillboxi kursusele, kasutades sooduskoodi «Habr».
Skillbox soovitab: Praktiline kursus .
TypeError: omadus ei ole mÀÀratud
let girl = {
name: "Lucky",
location: "Hollywood",
profession: "star",
thingsMissingInHerLife: true,
lovely: true,
cry: function() {
return "cry, cry, cries in her lonely heart"
}
}
console.log(girl.named.lucky)Ălaltoodud koodi nĂ€ide annab veateate Uncaught TypeError: Cannot read property âluckyâ of undefined. Probleem on selles, et objektil girl ei ole omadust named, kuigi on omadus name. Kuna omadus girl.named ei ole mÀÀratud, ei saa sellele ka ligi pÀÀseda, kuna formaalselt seda ei eksisteeri. Kuid kui asendada girl.named.lucky girl.name'iga, siis kĂ”ik töötab ja programm naaseb Lucky.
Rohkem teavet omaduste kohta on vÔimalik .
TypeErrori tÔrgete kÔrvaldamise meetodid
TypeErrori vead tekivad, kui programmeerija proovib teha toiminguid andmetega, mis ei vasta mÀÀratud tĂŒĂŒbile. NĂ€iteks vĂ”ib tuua .bold() rakendamise, undefined omaduse pĂ€rimise vĂ”i funktsiooni sikutamise, mis tegelikult ei ole funktsioon.
Seega, kui proovida kutsuda girl(), siis ilmneb viga Uncaught TypeError: yourVariable.bold is not a function ja girl is not a function, kuna tegelikult kutsutakse objekti, mitte funktsiooni.
Vigade kĂ”rvaldamiseks on oluline uurida muutujaid. Mis on girl? Ent mis on girl.named? Seda saab vĂ€lja selgitada, kui analĂŒĂŒsida koodi, vĂ€ljastada muutujaid console.log abil, kasutada kĂ€su debugger vĂ”i kutsuda muutuja nimi konsooli. Tuleb veenduda, et on vĂ”imalik manipuleerida selle muutuja andmetĂŒĂŒbiga. Kui see ei sobi, siis muuda seda, nĂ€iteks lisa tingimus vĂ”i blokka try..catch â ja saad kontrolli tegutsemise ĂŒle.
Stack overflow
Kui usuda Baby One More Time laulu autorite jĂ€rgi (jah, see on Britney Spears), tĂ€hendab sĂ”na hit antud kontekstis lauljanna soovi, et talle helistataks veel kord (see on laulu konteksti selgitus, - tĂ”lkija mĂ€rkus). On tĂ€iesti vĂ”imalik, et see soov toob kaasa tĂ”usu telefonikĂ”nedes reaalses elus. Kuid programmeerimises on see rekursioon, mis suudab tekitada virnade ĂŒletĂ€itumise viga.
Vead nÀevad vÀlja jÀrgmiselt:
Error: Out of stack space (Edge)
InternalError: too much recursion (Firefox)
RangeError: Maximum call stack size exceeded (Chrome)
Virna ĂŒletĂ€itumine toimub, kui arendaja ei ole arvesse vĂ”tnud rekursiooni baasjuhtumit vĂ”i kui kood ei pöördu ette nĂ€htud juhtumi poole.
function oneMoreTime(stillBelieve=true, loneliness=0) {
if (!stillBelieve && loneliness < 0) return
loneliness++
return oneMoreTime(stillBelieve, loneliness)
}Antud juhul ei saa stillBelieve kunagi false-ks, seega toimub iga kord oneMoreTime kutsumine, kuid funktsiooni tÀitmine ei lÔpeta kunagi.
Kui aga hakata lootma kahe sĂ”bra peale, vĂ€hendab see loneliness (ĂŒksildus) ja kĂ”net ei pea ootama.
function oneMoreTime(stillBelieve=true, loneliness=0) {
if (!stillBelieve && loneliness < 0) return
loneliness--
stillBelieve = false
return oneMoreTime(stillBelieve, loneliness)
}NĂ€iteks vĂ”ib tuua juhtumeid lĂ”pututest tsĂŒklitest, kus sĂŒsteem ei vĂ€ljastata veateadet, vaid leht, kus JavaScripti kood tĂ€idetakse, lihtsalt hangub. Nii juhtub, kui while tsĂŒklil pole lĂ”petamise tingimust.
let worldEnded = false
while (worldEnded !== true) {
console.log("Keep on dancin' till the world ends")
}Probleemi saab lahendada jÀrgmiselt:
let worldEnded = false
while (worldEnded !== true) {
console.log("Keep on dancin' till the world ends")
worldEnded = true
}LĂ”putute tsĂŒklite ja rekursioonide tĂ”rkeotsing
Kui tekib probleem lĂ”putu tsĂŒkliga, tuleb Chrome'is vĂ”i Edge'is vahekaart sulgeda ning Firefoxis brauseri aken. PĂ€rast seda tuleb kood hoolikalt analĂŒĂŒsida. Kui probleemi ei Ă”nnestu leida, tasub tsĂŒklisse vĂ”i funktsiooni lisada kĂ€sk debugger ja kontrollida muutujaid. Kui tulemus ei vasta ootustele, siis asendame, seda saab kergesti teha.
Ălaltoodud nĂ€ites tuleks debugging'it lisada funktsiooni vĂ”i tsĂŒkli esimesele reale. SeejĂ€rel tuleb avada Chrome'i debugimise vahekaart ja analĂŒĂŒsida muutujaid scope'is. Kasutades nuppu next, saab jĂ€lgida nende muutumist igas iteratsioonis. KĂ”ike seda on lihtne teha ja enamikul juhtudel on probleem juba olemas.
KÔike seda saab pÔhjalikumalt lugeda siit () ja siit ().
SĂŒntaksiviga
Ăks levinumaid vigu JavaScriptis on SyntaxError. Nende vĂ€ltimiseks aitavad tekstiredaktori laiendused. NĂ€iteks Bracket Pair Colorizer mĂ€rgib koodis sulud erinevate vĂ€rvidega, samas kui Prettier vĂ”i sarnane analĂŒĂŒsitööriist vĂ”imaldab kiiresti vigu leida. Parim vĂ”imalus SyntaxError'i tekkimise tĂ”enĂ€osuse vĂ€hendamiseks on miinimum sisemisus.
Jagage kommentaarides: mida teie teete, et vigu vÀltida vÔi neid kiiresti tuvastada ja kÔrvaldada?
Skillbox soovitab:
- Kaks aastat praktilist kursust .
- Veebikursus .
- Praktiline aastakursus .
Allikas: habr.com
