Mos, e bëra përsëri: Korrigjimi i gabimeve të zakonshme në JavaScript

Mos, e bëra përsëri: Korrigjimi i gabimeve të zakonshme në JavaScript

Shkrimi i kodit JavaScript mund të jetë sfidues dhe ndonjëherë frikësues, siç e dinë shumë zhvillues. Në procesin e punës në mënyrë të pashmangshme lindin gabime dhe disa prej tyre përsëriten shpesh. Ky artikull, i drejtuar për zhvilluesit fillestarë, flet për këto gabime dhe si t'i zgjidhni ato. Për qartësi, emrat e funksioneve, vetive dhe objekteve janë marrë nga këngë popullore. E gjithë kjo ju ndihmon të mbani mend shpejt se si të korrigjoni gabimet e zakonshme.

Kujtojmë: për të gjithë lexuesit e "Habr" - një zbritje prej 10 rubla kur regjistroheni në çdo kurs Skillbox duke përdorur kodin promovues "Habr".

Skillbox rekomandon: Kurse praktike "Zhvilluesi i celularit PRO".

TypeGabim: vetia nuk është e përcaktuar

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)

Shembulli i kodit të mësipërm hedh gabimin Uncaught TypeError: Nuk mund të lexohet vetia 'fat' e të papërcaktuar. Problemi është se objekti i vajzës nuk ka një pronë të emërtuar, megjithëse ka një pronë me emër. Dhe meqenëse prona me emrin girl.name nuk është e përcaktuar, ju nuk mund ta aksesoni atë, sepse formalisht ajo nuk ekziston. Por nëse zëvendësoni girl.named.lucky me girl.name, atëherë gjithçka do të funksionojë dhe programi do të kthehet Lucky.

Mund të mësoni më shumë rreth pronave lexo ketu.

Si të zgjidhni gabimet e tipit

Gabimet e llojit ndodhin kur një programues përpiqet të kryejë veprime në të dhëna që nuk përputhen me një lloj specifik. Shembujt përfshijnë përdorimin e .bold(), kërkimin e një vetie të padefinuar, ose thirrjen e një funksioni që në fakt nuk është funksion.

Pra, nëse provoni të thërrisni girl(), do të merrni gabimin Uncaught TypeError: yourVariable.bold nuk është një funksion dhe vajza nuk është një funksion, sepse në fakt është një objekt që thirret, jo një funksion.

Për të eliminuar gabimet, duhet të studioni variablat. Pra, çfarë është një vajzë? Çfarë është vajza.emri? Mund ta zbuloni duke analizuar kodin, duke shfaqur variabla duke përdorur console.log, komandën e korrigjuesit ose duke thirrur emrin e ndryshores në tastierë. Duhet të siguroheni që është e mundur të operoni sipas llojit të të dhënave që përmban variabla. Nëse nuk përshtatet, ndryshojeni, për shembull, shtoni një kusht ose provoni..catch block - dhe fitoni kontrollin mbi ekzekutimin e operacionit.

Mbushje e pirgut

Nëse besoni autorët e tekstit të këngës Baby One More Time (kjo është Britney Spears, po), atëherë fjala hit në këtë kontekst nënkupton dëshirën e këngëtarit për t'u thirrur përsëri (këtu është një shpjegim i vetë kontekstit të këngë - shënim i përkthyesit). Mund të ndodhë që kjo dëshirë të çojë në një rritje të numrit të thirrjeve në jetën reale. Por në programim, ky është një rekursion që mund të shkaktojë një gabim nëse grumbulli i thirrjeve tejmbushet.

Gabimet duken kështu:

Gabim: Nuk ka hapësirë ​​në rafte (Edge)
Gabim i brendshëm: shumë rekursion (Firefox)
Gabim i intervalit: Madhësia maksimale e stivës së telefonatave është tejkaluar (Chrome)

Një tejmbushje e pirgut ndodh nëse zhvilluesi nuk e merr parasysh rastin bazë në rekursion, ose nëse kodi nuk adreson rastin e synuar.

function oneMoreTime(stillBelieve=true, loneliness=0) {
    if (!stillBelieve && loneliness < 0) return
    loneliness++
    return oneMoreTime(stillBelieve, loneliness)
}

Në këtë rast, stillBelieve nuk mund të jetë kurrë false, kështu që oneMoreTime do të thirret çdo herë, por funksioni nuk do të përfundojë kurrë.

Nëse filloni të mbështeteni te dy miq, kjo do të zvogëlojë vetminë dhe nuk do t'ju duhet të prisni për një telefonatë.

function oneMoreTime(stillBelieve=true, loneliness=0) {
    if (!stillBelieve && loneliness < 0) return
    loneliness--
    stillBelieve = false
    return oneMoreTime(stillBelieve, loneliness)
}

Një shembull janë rastet me sythe të pafundme, kur sistemi nuk gjeneron një mesazh gabimi, por faqja në të cilën ekzekutohet kodi JavaScript thjesht ngrin. Kjo ndodh nëse cikli while nuk ka një kusht përfundimi.

let worldEnded = false
 
while (worldEnded !== true) {
  console.log("Keep on dancin' till the world ends")
}

Ju mund ta zgjidhni problemin si më poshtë:

let worldEnded = false
 
while (worldEnded !== true) {
  console.log("Keep on dancin' till the world ends")
  worldEnded = true
}

Korrigjimi i sytheve dhe rekursioneve të pafundme

Nëse keni një problem me lakun e pafund, duhet të mbyllni skedën në Chrome ose Edge dhe të mbyllni dritaren e shfletuesit në Firefox. Pas kësaj, duhet të analizoni me kujdes kodin. Nëse nuk mund ta gjeni problemin, ia vlen të shtoni një komandë korrigjuese në qarkun ose funksionin tuaj dhe të kontrolloni vlerat e variablave. Nëse rezultati nuk korrespondon me atë që pritej, atëherë ne e zëvendësojmë atë, kjo mund të bëhet lehtësisht.

Në shembullin e mësipërm, korrigjuesi duhet të shtohet si rreshti i parë i funksionit ose ciklit. Pastaj ju duhet të hapni skedën e korrigjimit në Chrome, duke analizuar variablat në shtrirje. Duke përdorur butonin tjetër, mund të gjurmoni ndryshimet e tyre në çdo përsëritje. E gjithë kjo është e lehtë për t'u bërë, dhe në shumicën e rasteve problemi gjendet.

Ju mund të lexoni më shumë për të gjitha këto këtu (për Chrome) dhe këtu (për Firefox).

Gabim sintaksor

Një nga gabimet më të zakonshme në JavaScript është SyntaxError. Zgjatjet e redaktuesit të tekstit do t'ju ndihmojnë t'i shmangni ato. Për shembull, Bracket Pair Colorizer shënon kllapat në kod me ngjyra të ndryshme dhe Prettier ose një mjet i ngjashëm analize bën të mundur gjetjen e shpejtë të gabimeve. Opsioni më i mirë për të zvogëluar gjasat e një Gabim sintaksor është foleja minimale.

Ndani në komente: çfarë bëni për të parandaluar gabimet ose për t'i zbuluar dhe eliminuar shpejt ato?

Skillbox rekomandon:

Burimi: www.habr.com

Shto një koment